From a38a1ac77bb6ac9ea8bf0cf5f5f6b68d0e6e6974 Mon Sep 17 00:00:00 2001 From: jinlin <jinlin> Date: 星期二, 02 一月 2024 08:44:10 +0800 Subject: [PATCH] 修改 --- modules/mainPart/src/main/resources/mapper/testReviewComment/TestReviewCommentDao.xml | 1 modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/model/ConfigAuditReport.java | 9 zt/core/src/main/java/com/zt/modules/sys/service/SysUserService.java | 11 web/src/views/modules/contractReview/ContractReview-AddOrUpdate.vue | 2 modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/service/TestReviewCommentService.java | 26 zt/core/src/main/resources/mapper/sys/SysUserDao.xml | 2 modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/service/QaAuditReportService.java | 182 +++++++ modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/dto/QaAuditReportDto.java | 34 + web/src/views/modules/configAuditReport/ConfigAuditReport.vue | 14 modules/mainPart/src/main/java/com/zt/life/modules/project/controller/ProjectController.java | 19 zt/core/src/main/java/com/zt/modules/sys/dao/SysUserDao.java | 2 modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/model/TestReviewComment.java | 5 modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/dao/QaAuditReportIncongruentDao.java | 24 + modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/controller/TestReviewCommentController.java | 11 modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/controller/QaAuditReportController.java | 123 +++++ web/src/views/modules/testReviewComment/TestReviewComment-AddOrUpdate.vue | 31 + web/src/views/modules/configAuditReport/ConfigAuditReport-AddOrUpdate.vue | 116 ++--- modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/model/QaAuditReport.java | 63 ++ modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/model/QaAuditReportIncongruent.java | 54 ++ modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/dao/QaAuditReportDao.java | 23 + web/src/views/modules/testReviewComment/TestReviewComment.vue | 11 web/src/views/modules/qaAuditReport/QaAuditReport.vue | 80 +++ modules/mainPart/src/main/resources/mapper/configAuditReport/ConfigAuditReportDao.xml | 5 web/src/views/modules/qaAuditReport/QaAuditReport-AddOrUpdate.vue | 243 ++++++++++ core/src/main/java/com/zt/life/export/service/WordFileService.java | 2 modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/service/QaAuditReportIncongruentService.java | 51 ++ modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/dto/ReviewCommentDto.java | 3 modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/dto/ConfigAuditDto.java | 4 modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/controller/ConfigAuditReportController.java | 23 modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/controller/QaAuditReportIncongruentController.java | 96 ++++ modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportDao.xml | 20 modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportIncongruentDao.xml | 33 + modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/service/ConfigAuditReportService.java | 41 + 33 files changed, 1,258 insertions(+), 106 deletions(-) diff --git a/core/src/main/java/com/zt/life/export/service/WordFileService.java b/core/src/main/java/com/zt/life/export/service/WordFileService.java index 331331f..1abcfb8 100644 --- a/core/src/main/java/com/zt/life/export/service/WordFileService.java +++ b/core/src/main/java/com/zt/life/export/service/WordFileService.java @@ -67,7 +67,7 @@ builder.bind(fieldName, new HackLoopTableRenderPolicy()); } else if (staticFieldValue != null) { if (typeName.contains("java.util.Date") && fieldName.contains("Date")) { - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); + SimpleDateFormat sdf = new SimpleDateFormat("yyyy骞碝M鏈坉d鏃�"); staticFieldValue = sdf.format(staticFieldValue); } String valStr = staticFieldValue.toString(); diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/controller/ConfigAuditReportController.java b/modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/controller/ConfigAuditReportController.java index d0a15c5..12096b6 100644 --- a/modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/controller/ConfigAuditReportController.java +++ b/modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/controller/ConfigAuditReportController.java @@ -15,6 +15,7 @@ import com.zt.life.modules.configAuditReport.dto.ConfigAuditDto; import com.zt.life.modules.configAuditReport.model.ConfigAuditReport; import com.zt.life.modules.configAuditReport.service.ConfigAuditReportService; +import com.zt.life.sys.dto.OssDto; import com.zt.life.sys.service.SysOssConfigService; import com.zt.modules.coderule.service.SysCodeRuleService; import io.swagger.annotations.Api; @@ -25,6 +26,8 @@ import org.springframework.web.bind.annotation.*; import springfox.documentation.annotations.ApiIgnore; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -56,9 +59,10 @@ @ApiImplicitParam(name = Constant.Q.LIMIT, value = Constant.QV.LIMIT, required = true, dataType = Constant.QT.INT), @ApiImplicitParam(name = Constant.Q.ORDER_FIELD, value = Constant.QV.ORDER_FIELD, dataType = Constant.QT.STRING), @ApiImplicitParam(name = Constant.Q.ORDER, value = Constant.QV.ORDER, dataType = Constant.QT.STRING), - @ApiImplicitParam(name = "code", value = "缂栧彿", dataType = Constant.QT.STRING, format = "code^LK"), - @ApiImplicitParam(name = "libraryType", value = "搴撶被鍨�", dataType = Constant.QT.STRING, format = "a.library_type^EQ") -}) + @ApiImplicitParam(name = "code", value = "缂栧彿", dataType = Constant.QT.STRING, format = "a.code^LK"), + @ApiImplicitParam(name = "softwareIdentity", value = "椤圭洰鏍囪瘑", dataType = Constant.QT.STRING, format = "p.software_identity^LK"), + @ApiImplicitParam(name = "softwareName", value = "椤圭洰鍚嶇О", dataType = Constant.QT.STRING, format = "p.software_name^LK"), + }) public PageResult<ConfigAuditReport> page(@ApiIgnore @QueryParam QueryFilter queryFilter){ return PageResult.ok(configAuditReportService.page(queryFilter)); @@ -68,6 +72,12 @@ @ApiOperation("淇℃伅") public Result<ConfigAuditDto> getDto(Long projectId, Long reportId) { ConfigAuditDto data =configAuditReportService.getDto(projectId, reportId); + if (reportId!=null) { + OssDto ossDto = sysOssConfigService.getOssByBusiType(reportId, "config_audit_report"); + if (ossDto != null) { + data.setFiles(ossDto); + } + } return Result.ok(data); } @@ -106,4 +116,11 @@ return Result.ok(); } + @GetMapping("exportConfigAudit") + @ApiOperation("鎵撳嵃瀹℃牳鎶ュ憡") + @LogOperation("鎵撳嵃瀹℃牳鎶ュ憡") + public void exportConfigAudit(Long id, HttpServletRequest request, HttpServletResponse response) { + configAuditReportService.exportConfigAudit(id, request, response); + } + } diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/dto/ConfigAuditDto.java b/modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/dto/ConfigAuditDto.java index 9ad62d9..82cf4af 100644 --- a/modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/dto/ConfigAuditDto.java +++ b/modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/dto/ConfigAuditDto.java @@ -8,6 +8,7 @@ import com.zt.life.modules.configItemWarehouse.model.WarehouseConfigItem; import com.zt.life.modules.configItemWarehouse.model.WarehouseQaAudit; import com.zt.life.modules.project.model.Project; +import com.zt.life.sys.dto.OssDto; import com.zt.modules.workflow.dto.FlowInfoDto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -27,7 +28,8 @@ private Project project; - private FlowInfoDto flowInfoDto; + @ApiModelProperty(value = "闄勪欢") + private OssDto files; @ApiModelProperty(value = "瀹℃牳鍐呭") private List<ConfigAuditReportContent> contentList = new ArrayList<>(); diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/model/ConfigAuditReport.java b/modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/model/ConfigAuditReport.java index 21bcc73..eaf16d6 100644 --- a/modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/model/ConfigAuditReport.java +++ b/modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/model/ConfigAuditReport.java @@ -1,5 +1,6 @@ package com.zt.life.modules.configAuditReport.model; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import com.zt.common.entity.BusiEntity; @@ -41,4 +42,12 @@ @ApiModelProperty(value = "骞翠唤") private String year; + @TableField(exist = false) + @ApiModelProperty(value = "椤圭洰鏍囪瘑") + private String softwareIdentity; + + @TableField(exist = false) + @ApiModelProperty(value = "椤圭洰鍚嶇О") + private String softwareName; + } diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/service/ConfigAuditReportService.java b/modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/service/ConfigAuditReportService.java index f8243ba..9a0efef 100644 --- a/modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/service/ConfigAuditReportService.java +++ b/modules/mainPart/src/main/java/com/zt/life/modules/configAuditReport/service/ConfigAuditReportService.java @@ -1,7 +1,9 @@ package com.zt.life.modules.configAuditReport.service; +import cn.hutool.core.convert.Convert; import com.zt.common.service.BaseService; import com.zt.common.utils.CommonUtils; +import com.zt.life.export.dto.WordFile; import com.zt.life.export.service.WordFileService; import com.zt.life.modules.baselineRelease.dto.BaselineDto; import com.zt.life.modules.baselineRelease.model.BaselineRelease; @@ -20,6 +22,7 @@ import com.zt.life.modules.mainPart.utils.GetFilesPath; import com.zt.life.modules.mainPart.utils.GetShowDictList; import com.zt.life.modules.project.model.Project; +import com.zt.life.modules.project.model.SoftwareTestOrder; import com.zt.life.modules.project.model.SoftwareTestOrderDeliverable; import com.zt.life.modules.project.model.SoftwareTestOrderMeasured; import com.zt.life.modules.project.service.ProjectService; @@ -37,6 +40,10 @@ import org.springframework.stereotype.Service; import com.zt.common.db.query.QueryFilter; import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileNotFoundException; +import java.io.UnsupportedEncodingException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -75,8 +82,6 @@ @Autowired private WordFileService wordFileService; - @Autowired - private GetFilesPath getFilesPath; /** * 鍒嗛〉鏌ヨ * @@ -84,7 +89,11 @@ * @return */ public List<ConfigAuditReport> page(QueryFilter queryFilter) { - return baseDao.getList(queryFilter.getQueryParams()); + List<ConfigAuditReport> list = baseDao.getList(queryFilter.getQueryParams()); + if (list != null && list.size() > 0) { + sysOssService.setListOsses(list, "config_audit_report"); + } + return list; } /** @@ -156,6 +165,32 @@ problemService.insert(problem); } } + sysOssConfigService.updateOss(configAuditDto.getId(), configAuditDto.getFiles());// 淇濆瓨闄勪欢 return true; } + + public void exportConfigAudit(Long id, HttpServletRequest request, HttpServletResponse response) { + try { + ConfigAuditDto dataObj = this.getDto(null, id); + //閫氱敤瀛楀吀鍒楄〃瀛楃涓茬敓鎴� + for (ConfigAuditReportContent content : dataObj.getContentList()) { + String value = content.getAuditResult(); + String auditResult = getShowDictList.getShowDictList(value, "status_tag", false); + content.setAuditResult(auditResult); + } + for (ConfigAuditReportProblem problem : dataObj.getProblemList()) { + String value = problem.getIsNotTrue(); + String IsNotTrue = getShowDictList.getShowDictList(value, "is_or_not", false); + problem.setIsNotTrue(IsNotTrue); + } + WordFile wordFile = new WordFile(); + wordFile.setModulePath("閰嶇疆瀹℃牳鎶ュ憡.docx"); + wordFile.setWordName(dataObj.getProject().getSoftwareName() + "_閰嶇疆瀹℃牳鎶ュ憡.docx"); + wordFileService.exportWordFile(request, dataObj, wordFile, response); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } } diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/project/controller/ProjectController.java b/modules/mainPart/src/main/java/com/zt/life/modules/project/controller/ProjectController.java index a136934..ae3fd5c 100644 --- a/modules/mainPart/src/main/java/com/zt/life/modules/project/controller/ProjectController.java +++ b/modules/mainPart/src/main/java/com/zt/life/modules/project/controller/ProjectController.java @@ -67,7 +67,7 @@ @ApiImplicitParam(name = "pageCode", value = "椤甸潰鏍囪瘑", dataType = Constant.QT.STRING), }) public PageResult<Project> page(@ApiIgnore @QueryParam QueryFilter queryFilter) { - if (queryFilter.getParams().containsValue("baseline_release")||queryFilter.getParams().containsValue("config_item_warehouse")){ + if (queryFilter.getParams().containsValue("baseline_release")||queryFilter.getParams().containsValue("config_item_warehouse")||queryFilter.getParams().containsValue("test_review_comment")){ queryFilter.getParams().replace("tableName",""); } List<Project> Project =projectService.page(queryFilter); @@ -94,7 +94,7 @@ map.put("year", year); project.setYear(year); project.setCode(sysCodeRuleService.getNewCode(map)); - String leaderName = sysUserService.getUsersName(Convert.toLong(project.getProjectLeader())); + String leaderName = sysUserService.getUsersName(project.getProjectLeader()); project.setProjectLeader(leaderName); projectService.insert(project); return Result.ok(); @@ -106,8 +106,21 @@ public Result update(@RequestBody Project project) { //鏁堥獙鏁版嵁 ValidatorUtils.validateEntity(project, UpdateGroup.class, DefaultGroup.class); - String leaderName = sysUserService.getUsersName(Convert.toLong(project.getProjectLeader())); + String leaderName = project.getProjectLeader(); + String projectTesters =project.getProjectTesters(); + String projectReviewer =project.getProjectReviewer(); + if (leaderName.length()>10){ + leaderName=sysUserService.getNames(leaderName); + } + if (projectTesters.length()>10){ + projectTesters=sysUserService.getNames(projectTesters); + } + if (projectReviewer.length()>10){ + projectReviewer=sysUserService.getNames(projectReviewer); + } project.setProjectLeader(leaderName); + project.setProjectTesters(projectTesters); + project.setProjectReviewer(projectReviewer); projectService.update(project); return Result.ok(); } diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/controller/QaAuditReportController.java b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/controller/QaAuditReportController.java new file mode 100644 index 0000000..f03abe5 --- /dev/null +++ b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/controller/QaAuditReportController.java @@ -0,0 +1,123 @@ +package com.zt.life.modules.qaAuditReport.controller; + + +import com.zt.common.annotation.LogOperation; +import com.zt.common.constant.Constant; +import com.zt.common.annotation.QueryParam; +import com.zt.common.db.query.QueryFilter; +import com.zt.common.servlet.Result; +import com.zt.common.servlet.PageResult; +import com.zt.common.validator.AssertUtils; +import com.zt.common.validator.ValidatorUtils; +import com.zt.common.validator.group.AddGroup; +import com.zt.common.validator.group.DefaultGroup; +import com.zt.common.validator.group.UpdateGroup; +import com.zt.life.modules.configAuditReport.dto.ConfigAuditDto; +import com.zt.life.modules.qaAuditReport.dto.QaAuditReportDto; +import com.zt.life.modules.qaAuditReport.model.QaAuditReport; +import com.zt.life.modules.qaAuditReport.service.QaAuditReportService; +import com.zt.life.sys.dto.OssDto; +import com.zt.life.sys.service.SysOssConfigService; +import com.zt.modules.coderule.service.SysCodeRuleService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import springfox.documentation.annotations.ApiIgnore; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * qa_audit_report + * + * @author zt generator + * @since 1.0.0 2023-12-29 + */ +@RestController +@RequestMapping("/qaAuditReport/QaAuditReport/") +@Api(tags="qa_audit_report") +public class QaAuditReportController { + @Autowired + private QaAuditReportService qaAuditReportService; + + @Autowired + private SysCodeRuleService sysCodeRuleService; + + @Autowired + private SysOssConfigService sysOssConfigService; + + @GetMapping("page") + @ApiOperation("鍒嗛〉") + @ApiImplicitParams({ + @ApiImplicitParam(name = Constant.Q.PAGE, value = Constant.QV.PAGE, required = true, dataType = Constant.QT.INT), + @ApiImplicitParam(name = Constant.Q.LIMIT, value = Constant.QV.LIMIT, required = true, dataType = Constant.QT.INT), + @ApiImplicitParam(name = Constant.Q.ORDER_FIELD, value = Constant.QV.ORDER_FIELD, dataType = Constant.QT.STRING), + @ApiImplicitParam(name = Constant.Q.ORDER, value = Constant.QV.ORDER, dataType = Constant.QT.STRING), + @ApiImplicitParam(name = "code", value = "缂栧彿", dataType = Constant.QT.STRING, format = "code^LK") }) + public PageResult<QaAuditReport> page(@ApiIgnore @QueryParam QueryFilter queryFilter){ + return PageResult.ok(qaAuditReportService.page(queryFilter)); + } + + @GetMapping("getDto") + @ApiOperation("淇℃伅") + public Result<QaAuditReportDto> getDto(Long projectId, Long reportId) { + QaAuditReportDto data =qaAuditReportService.getDto(projectId, reportId); + if (reportId!=null) { + OssDto ossDto = sysOssConfigService.getOssByBusiType(reportId, "qa_audit_report"); + if (ossDto != null) { + data.setFiles(ossDto); + } + } + return Result.ok(data); + } + + @PostMapping + @ApiOperation("鏂板") + @LogOperation("鏂板") + public Result insert(@RequestBody QaAuditReportDto qaAuditReportDto){ + //鏁堥獙鏁版嵁 + ValidatorUtils.validateEntity(qaAuditReportDto, AddGroup.class, DefaultGroup.class); + Map<String, String> map = new HashMap<>(); + map.put("funCode", "qa_audit_report"); + map.put("projectId",qaAuditReportDto.getProjectId().toString()); + qaAuditReportDto.getAuditReport().setCode(sysCodeRuleService.getNewCode(map)); + Boolean result = qaAuditReportService.save(qaAuditReportDto); + return Result.ok(); + } + + @PutMapping + @ApiOperation("淇敼") + @LogOperation("淇敼") + public Result update(@RequestBody QaAuditReportDto qaAuditReportDto){ + //鏁堥獙鏁版嵁 + ValidatorUtils.validateEntity(qaAuditReportDto, UpdateGroup.class, DefaultGroup.class); + Boolean result = qaAuditReportService.save(qaAuditReportDto); + return Result.ok(); + } + + + @DeleteMapping("deleteQaReport") + @ApiOperation("鍒犻櫎") + @LogOperation("鍒犻櫎") + public Result delete(@RequestBody Long[] ids){ + //鏁堥獙鏁版嵁 + AssertUtils.isArrayEmpty(ids, "id"); + qaAuditReportService.delete(ids); + + return Result.ok(); + } + @GetMapping("exportQaReport") + @ApiOperation("鎵撳嵃QA瀹℃牳鎶ュ憡") + @LogOperation("鎵撳嵃QA瀹℃牳鎶ュ憡") + public void exportQaReport(Long id, HttpServletRequest request, HttpServletResponse response) { + qaAuditReportService.exportQaReport(id, request, response); + } + +} diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/controller/QaAuditReportIncongruentController.java b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/controller/QaAuditReportIncongruentController.java new file mode 100644 index 0000000..fd3baba --- /dev/null +++ b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/controller/QaAuditReportIncongruentController.java @@ -0,0 +1,96 @@ +package com.zt.life.modules.qaAuditReport.controller; + + +import com.zt.common.annotation.LogOperation; +import com.zt.common.constant.Constant; +import com.zt.common.annotation.QueryParam; +import com.zt.common.db.query.QueryFilter; +import com.zt.common.servlet.Result; +import com.zt.common.servlet.PageResult; +import com.zt.common.validator.AssertUtils; +import com.zt.common.validator.ValidatorUtils; +import com.zt.common.validator.group.AddGroup; +import com.zt.common.validator.group.DefaultGroup; +import com.zt.common.validator.group.UpdateGroup; +import com.zt.life.modules.qaAuditReport.model.QaAuditReportIncongruent; +import com.zt.life.modules.qaAuditReport.service.QaAuditReportIncongruentService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiImplicitParam; +import io.swagger.annotations.ApiImplicitParams; +import io.swagger.annotations.ApiOperation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import springfox.documentation.annotations.ApiIgnore; + +import javax.servlet.http.HttpServletResponse; +import java.util.List; + + +/** + * qa_audit_report_incongruent + * + * @author zt generator + * @since 1.0.0 2023-12-29 + */ +@RestController +@RequestMapping("/qaAuditReport/QaAuditReportIncongruent/") +@Api(tags="qa_audit_report_incongruent") +public class QaAuditReportIncongruentController { + @Autowired + private QaAuditReportIncongruentService qaAuditReportIncongruentService; + + @GetMapping("page") + @ApiOperation("鍒嗛〉") + @ApiImplicitParams({ + @ApiImplicitParam(name = Constant.Q.PAGE, value = Constant.QV.PAGE, required = true, dataType = Constant.QT.INT), + @ApiImplicitParam(name = Constant.Q.LIMIT, value = Constant.QV.LIMIT, required = true, dataType = Constant.QT.INT), + @ApiImplicitParam(name = Constant.Q.ORDER_FIELD, value = Constant.QV.ORDER_FIELD, dataType = Constant.QT.STRING), + @ApiImplicitParam(name = Constant.Q.ORDER, value = Constant.QV.ORDER, dataType = Constant.QT.STRING), + }) + public PageResult<QaAuditReportIncongruent> page(@ApiIgnore @QueryParam QueryFilter queryFilter){ + + return PageResult.ok(qaAuditReportIncongruentService.page(queryFilter)); + } + + @GetMapping("{id}") + @ApiOperation("淇℃伅") + public Result<QaAuditReportIncongruent> get(@PathVariable("id") Long id){ + QaAuditReportIncongruent data = qaAuditReportIncongruentService.get(id); + + return Result.ok(data); + } + + @PostMapping + @ApiOperation("鏂板") + @LogOperation("鏂板") + public Result insert(@RequestBody QaAuditReportIncongruent qaAuditReportIncongruent){ + //鏁堥獙鏁版嵁 + ValidatorUtils.validateEntity(qaAuditReportIncongruent, AddGroup.class, DefaultGroup.class); + qaAuditReportIncongruentService.insert(qaAuditReportIncongruent); + + return Result.ok(); + } + + @PutMapping + @ApiOperation("淇敼") + @LogOperation("淇敼") + public Result update(@RequestBody QaAuditReportIncongruent qaAuditReportIncongruent){ + //鏁堥獙鏁版嵁 + ValidatorUtils.validateEntity(qaAuditReportIncongruent, UpdateGroup.class, DefaultGroup.class); + qaAuditReportIncongruentService.update(qaAuditReportIncongruent); + + return Result.ok(); + } + + @DeleteMapping + @ApiOperation("鍒犻櫎") + @LogOperation("鍒犻櫎") + public Result delete(@RequestBody Long[] ids){ + //鏁堥獙鏁版嵁 + AssertUtils.isArrayEmpty(ids, "id"); + qaAuditReportIncongruentService.delete(ids); + + return Result.ok(); + } + +} diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/dao/QaAuditReportDao.java b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/dao/QaAuditReportDao.java new file mode 100644 index 0000000..b955732 --- /dev/null +++ b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/dao/QaAuditReportDao.java @@ -0,0 +1,23 @@ +package com.zt.life.modules.qaAuditReport.dao; + +import com.zt.common.dao.BaseDao; +import com.zt.life.modules.qaAuditReport.model.QaAuditReport; +import org.apache.ibatis.annotations.Mapper; + + +import java.util.List; +import java.util.Map; + + +/** + * qa_audit_report + * + * @author zt generator + * @since 1.0.0 2023-12-29 + */ +@Mapper +public interface QaAuditReportDao extends BaseDao<QaAuditReport> { + + List<QaAuditReport> getList(Map<String, Object> params); + +} diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/dao/QaAuditReportIncongruentDao.java b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/dao/QaAuditReportIncongruentDao.java new file mode 100644 index 0000000..c34e1d7 --- /dev/null +++ b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/dao/QaAuditReportIncongruentDao.java @@ -0,0 +1,24 @@ +package com.zt.life.modules.qaAuditReport.dao; + +import com.zt.common.dao.BaseDao; +import com.zt.life.modules.qaAuditReport.model.QaAuditReportIncongruent; +import org.apache.ibatis.annotations.Mapper; + + +import java.util.List; +import java.util.Map; + + +/** + * qa_audit_report_incongruent + * + * @author zt generator + * @since 1.0.0 2023-12-29 + */ +@Mapper +public interface QaAuditReportIncongruentDao extends BaseDao<QaAuditReportIncongruent> { + + List<QaAuditReportIncongruent> getList(Map<String, Object> params); + + List<QaAuditReportIncongruent> createList(Long projectId); +} diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/dto/QaAuditReportDto.java b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/dto/QaAuditReportDto.java new file mode 100644 index 0000000..0447597 --- /dev/null +++ b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/dto/QaAuditReportDto.java @@ -0,0 +1,34 @@ +package com.zt.life.modules.qaAuditReport.dto; + +import com.zt.life.modules.configAuditReport.model.ConfigAuditReport; +import com.zt.life.modules.configAuditReport.model.ConfigAuditReportContent; +import com.zt.life.modules.configAuditReport.model.ConfigAuditReportProblem; +import com.zt.life.modules.project.model.Project; +import com.zt.life.modules.qaAuditReport.model.QaAuditReport; +import com.zt.life.modules.qaAuditReport.model.QaAuditReportIncongruent; +import com.zt.life.sys.dto.OssDto; +import com.zt.modules.workflow.dto.FlowInfoDto; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.util.ArrayList; +import java.util.List; + +@Data +public class QaAuditReportDto { + private Long id; + private Long projectId; + private Long reportId; + + @ApiModelProperty(value = "閰嶇疆瀹℃牳鎶ュ憡") + private QaAuditReport auditReport; + @ApiModelProperty(value = "娴嬭瘯椤圭洰鍩烘湰淇℃伅") + private Project project; + + private FlowInfoDto flowInfoDto; + @ApiModelProperty(value = "闄勪欢") + private OssDto files; + + @ApiModelProperty(value = "涓嶇鍚堥」鍒楄〃") + private List<QaAuditReportIncongruent> incongruentList = new ArrayList<>(); +} diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/model/QaAuditReport.java b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/model/QaAuditReport.java new file mode 100644 index 0000000..7c02232 --- /dev/null +++ b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/model/QaAuditReport.java @@ -0,0 +1,63 @@ +package com.zt.life.modules.qaAuditReport.model; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.zt.common.entity.BusiEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * qa_audit_report + * + * @author zt generator + * @since 1.0.0 2023-12-29 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("qa_audit_report") +public class QaAuditReport extends BusiEntity { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "椤圭洰ID") + private Long projectId; + + @ApiModelProperty(value = "缂栧彿") + private String code; + + @ApiModelProperty(value = "宸插畬鎴愮殑妫�鏌�") + private String completedCheck; + + @ApiModelProperty(value = "qa鎬荤粨") + private String qaSummary; + + @ApiModelProperty(value = "妫�鏌ヤ汉") + private String checker; + + @ApiModelProperty(value = "妫�鏌ヤ汉ID") + private Long checkerId; + + @ApiModelProperty(value = "妫�鏌ユ棩鏈�") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date checkDate; + + @ApiModelProperty(value = "鐩戠潱浜烘剰瑙�") + private String supervisorOpinion; + + @ApiModelProperty(value = "鐩戠潱浜虹鍚�") + private String supervisorSign; + + @ApiModelProperty(value = "鐩戠潱浜篒D") + private Long supervisorId; + + @ApiModelProperty(value = "鐩戠潱鏃ユ湡") + @JsonFormat(pattern = "yyyy-MM-dd") + private Date superviseDate; + + @ApiModelProperty(value = "骞翠唤") + private String year; + +} diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/model/QaAuditReportIncongruent.java b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/model/QaAuditReportIncongruent.java new file mode 100644 index 0000000..3a0fe9b --- /dev/null +++ b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/model/QaAuditReportIncongruent.java @@ -0,0 +1,54 @@ +package com.zt.life.modules.qaAuditReport.model; + +import com.baomidou.mybatisplus.annotation.TableName; +import com.zt.common.entity.BusiEntity; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.util.Date; + +/** + * qa_audit_report_incongruent + * + * @author zt generator + * @since 1.0.0 2023-12-29 + */ +@Data +@EqualsAndHashCode(callSuper=false) +@TableName("qa_audit_report_incongruent") +public class QaAuditReportIncongruent extends BusiEntity { + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value = "鎶ュ憡ID") + private Long reportId; + + @ApiModelProperty(value = "椤圭洰宸ョ▼ID") + private Long projectId; + + @ApiModelProperty(value = "搴忓彿") + private Integer no; + + @ApiModelProperty(value = "涓嶇鍚堥」鍗曞彿") + private String oddNum; + + @ApiModelProperty(value = "涓嶇鍚堥」鎻忚堪") + private String describe; + + @ApiModelProperty(value = "鎵�灞炲伐浣滀骇鍝�/杩囩▼") + private String workProcess; + + @ApiModelProperty(value = "鍙戠幇闃舵") + private String discoveryPhase; + + @ApiModelProperty(value = "璐d换浜�") + private String chargePerson; + + @ApiModelProperty(value = "鐘舵��") + private String status; + + @ApiModelProperty(value = "澶囨敞") + private String remark; + +} diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/service/QaAuditReportIncongruentService.java b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/service/QaAuditReportIncongruentService.java new file mode 100644 index 0000000..24a02a3 --- /dev/null +++ b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/service/QaAuditReportIncongruentService.java @@ -0,0 +1,51 @@ +package com.zt.life.modules.qaAuditReport.service; + +import com.zt.common.service.BaseService; +import com.zt.life.modules.qaAuditReport.dao.QaAuditReportIncongruentDao; +import com.zt.life.modules.qaAuditReport.model.QaAuditReportIncongruent; +import org.springframework.stereotype.Service; +import com.zt.common.db.query.QueryFilter; +import javax.annotation.Resource; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * qa_audit_report_incongruent + * + * @author zt generator + * @since 1.0.0 2023-12-29 + */ +@Service +public class QaAuditReportIncongruentService extends BaseService<QaAuditReportIncongruentDao, QaAuditReportIncongruent> { + + /** + * 鍒嗛〉鏌ヨ + * + * @param queryFilter + * @return + */ + public List<QaAuditReportIncongruent> page(QueryFilter queryFilter) { + return baseDao.getList(queryFilter.getQueryParams()); + } + + /** + * 鍒犻櫎 + * + * @param ids + */ + public void delete(Long[] ids) { + super.deleteLogic(ids); + } + + public List<QaAuditReportIncongruent> getList(Long reportId) { + Map<String, Object> params = new HashMap<>(); + params.put("reportId",reportId); + return baseDao.getList(params); + } + + public List<QaAuditReportIncongruent> createList(Long projectId) { + return baseDao.createList(projectId); + } +} diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/service/QaAuditReportService.java b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/service/QaAuditReportService.java new file mode 100644 index 0000000..b617d53 --- /dev/null +++ b/modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/service/QaAuditReportService.java @@ -0,0 +1,182 @@ +package com.zt.life.modules.qaAuditReport.service; + +import cn.hutool.core.convert.Convert; +import com.zt.common.service.BaseService; +import com.zt.common.utils.CommonUtils; +import com.zt.life.export.dto.WordFile; +import com.zt.life.export.service.WordFileService; +import com.zt.life.modules.baselineRelease.dto.BaselineDto; +import com.zt.life.modules.configAuditReport.dto.ConfigAuditDto; +import com.zt.life.modules.configAuditReport.model.ConfigAuditReport; +import com.zt.life.modules.configAuditReport.model.ConfigAuditReportContent; +import com.zt.life.modules.configAuditReport.model.ConfigAuditReportProblem; +import com.zt.life.modules.configAuditReport.service.ConfigAuditReportContentService; +import com.zt.life.modules.configAuditReport.service.ConfigAuditReportProblemService; +import com.zt.life.modules.mainPart.utils.GetFilesPath; +import com.zt.life.modules.mainPart.utils.GetShowDictList; +import com.zt.life.modules.project.service.ProjectService; +import com.zt.life.modules.qaAuditReport.dao.QaAuditReportDao; +import com.zt.life.modules.qaAuditReport.dto.QaAuditReportDto; +import com.zt.life.modules.qaAuditReport.model.QaAuditReport; +import com.zt.life.modules.qaAuditReport.model.QaAuditReportIncongruent; +import com.zt.life.sys.service.SysOssConfigService; +import com.zt.modules.coderule.service.SysCodeRuleService; +import com.zt.modules.oss.service.SysOssService; +import com.zt.modules.workflow.dto.FlowInfoDto; +import com.zt.modules.workflow.service.WorkflowService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import com.zt.common.db.query.QueryFilter; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.FileNotFoundException; +import java.io.UnsupportedEncodingException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +/** + * qa_audit_report + * + * @author zt generator + * @since 1.0.0 2023-12-29 + */ +@Service +public class QaAuditReportService extends BaseService<QaAuditReportDao, QaAuditReport> { + @Autowired + private SysOssConfigService sysOssConfigService; + + @Autowired + private SysOssService sysOssService; + + @Autowired + private SysCodeRuleService sysCodeRuleService; + + @Autowired + private ProjectService projectService; + + @Autowired + private GetShowDictList getShowDictList; + + @Autowired + private WordFileService wordFileService; + + @Autowired + private GetFilesPath getFilesPath; + + @Autowired + private QaAuditReportIncongruentService incongruentService; + + + @Autowired + private WorkflowService workflowService; + /** + * 鍒嗛〉鏌ヨ + * + * @param queryFilter + * @return + */ + public List<QaAuditReport> page(QueryFilter queryFilter) { + List<QaAuditReport> list = baseDao.getList(queryFilter.getQueryParams()); + if (list != null && list.size() > 0) { + workflowService.getRunFlow(list, "pzbgsh"); + sysOssService.setListOsses(list, "qa_audit_report"); + } + return list; + } + + /** + * 鍒犻櫎 + * + * @param ids + */ + public void delete(Long[] ids) { + super.deleteLogic(ids); + } + + public QaAuditReportDto getDto(Long projectId, Long reportId) { + QaAuditReportDto data = new QaAuditReportDto(); + if (reportId != null) { + data.setId(reportId); + QaAuditReport auditReport = this.get(reportId); + data.setAuditReport(auditReport); + if (auditReport != null && projectId == null) { + projectId = auditReport.getProjectId(); + } + List<QaAuditReportIncongruent> incongruentList = incongruentService.getList(reportId); + data.setIncongruentList(incongruentList); + } else { + QaAuditReport auditReport = new QaAuditReport(); + data.setAuditReport(auditReport); + List<QaAuditReportIncongruent> incongruentList = incongruentService.createList(projectId); + data.setIncongruentList(incongruentList); + } + if (projectId != null) { + data.setProjectId(projectId); + data.setProject(projectService.get(projectId)); + } + return data; + } + + public Boolean save(QaAuditReportDto qaAuditReportDto) { + Long reportId = qaAuditReportDto.getAuditReport().getId(); + if (reportId != null) + baseDao.updateById(qaAuditReportDto.getAuditReport()); + else { + Map<String, String> map = new HashMap<>(); + map.put("funCode", "qa_audit_report"); + map.put("projectId", qaAuditReportDto.getProjectId().toString()); + qaAuditReportDto.getAuditReport().setProjectId(qaAuditReportDto.getProjectId()); + qaAuditReportDto.getAuditReport().setCode(sysCodeRuleService.getNewCode(map)); + baseDao.insert(qaAuditReportDto.getAuditReport()); + reportId = qaAuditReportDto.getAuditReport().getId(); + } + + for (QaAuditReportIncongruent incongruent : qaAuditReportDto.getIncongruentList()) { + incongruent.setReportId(reportId); + if (incongruent.getId() != null) { + QaAuditReportIncongruent incongruent2 = incongruentService.get(incongruent.getId()); + if (CommonUtils.isActureChangeData(incongruent,incongruent2)) { + incongruentService.update(incongruent); + } + } else { + incongruent.setProjectId(qaAuditReportDto.getAuditReport().getProjectId()); + incongruentService.insert(incongruent); + } + } + + sysOssConfigService.updateOss(qaAuditReportDto.getId(), qaAuditReportDto.getFiles());// 淇濆瓨闄勪欢 + Long bizId = qaAuditReportDto.getAuditReport().getId(); + FlowInfoDto flowInfoDto = qaAuditReportDto.getFlowInfoDto(); + + if (flowInfoDto != null && flowInfoDto.getSubmitType() != null && "tj,bl".contains(flowInfoDto.getSubmitType())) { + if ("tj".equals(flowInfoDto.getSubmitType())) { + workflowService.startFlow(flowInfoDto.getFlowCode(), bizId); + } + workflowService.approvePass(flowInfoDto.getFlowCode(), bizId, flowInfoDto.getStepIdMark()); + } + return true; + } + + public void exportQaReport(Long id, HttpServletRequest request, HttpServletResponse response) { + try { + QaAuditReportDto dataObj = this.getDto(null, id); + + String CheckerPath = "鏂囦欢鍥剧墖:" + getFilesPath.getSignPath(Convert.toLong(dataObj.getAuditReport().getCheckerId())); + dataObj.getAuditReport().setChecker(CheckerPath); + String SupervisorPath = "鏂囦欢鍥剧墖:" + getFilesPath.getSignPath(Convert.toLong(dataObj.getAuditReport().getSupervisorId())); + dataObj.getAuditReport().setSupervisorSign(SupervisorPath); + + WordFile wordFile = new WordFile(); + wordFile.setModulePath("QA瀹℃牳鎶ュ憡.docx"); + wordFile.setWordName(dataObj.getProject().getSoftwareName() + "_QA瀹℃牳鎶ュ憡.docx"); + wordFileService.exportWordFile(request, dataObj, wordFile, response); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } catch (FileNotFoundException e) { + e.printStackTrace(); + } + } +} diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/controller/TestReviewCommentController.java b/modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/controller/TestReviewCommentController.java index afd33b0..4c288f2 100644 --- a/modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/controller/TestReviewCommentController.java +++ b/modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/controller/TestReviewCommentController.java @@ -16,6 +16,8 @@ import com.zt.life.modules.testReviewComment.dto.ReviewCommentDto; import com.zt.life.modules.testReviewComment.model.TestReviewComment; import com.zt.life.modules.testReviewComment.service.TestReviewCommentService; +import com.zt.life.sys.dto.OssDto; +import com.zt.life.sys.service.SysOssConfigService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiImplicitParam; import io.swagger.annotations.ApiImplicitParams; @@ -41,6 +43,8 @@ public class TestReviewCommentController { @Autowired private TestReviewCommentService testReviewCommentService; + @Autowired + private SysOssConfigService sysOssConfigService; @GetMapping("page") @ApiOperation("鍒嗛〉") @@ -51,6 +55,7 @@ @ApiImplicitParam(name = Constant.Q.ORDER, value = Constant.QV.ORDER, dataType = Constant.QT.STRING), @ApiImplicitParam(name = "code", value = "娴嬭瘯璇勫缂栧彿", dataType = Constant.QT.STRING, format = "a.code^LK"), @ApiImplicitParam(name = "softwareName", value = "椤圭洰鍚嶇О", dataType = Constant.QT.STRING, format = "p.software_name^LK"), + @ApiImplicitParam(name = "softwareIdentity", value = "椤圭洰鏍囪瘑", dataType = Constant.QT.STRING, format = "p.software_identity^LK"), @ApiImplicitParam(name = "pageCode", value = "閰嶇疆椤规爣璇�", dataType = Constant.QT.STRING, format = "a.page_code^LK") }) public PageResult<TestReviewComment> page(@ApiIgnore @QueryParam QueryFilter queryFilter){ @@ -61,6 +66,12 @@ @ApiOperation("淇℃伅") public Result<ReviewCommentDto> getDto(Long commentId, Long projectId, String pageCode) { ReviewCommentDto data = testReviewCommentService.getDto(commentId, projectId, pageCode); + if (commentId!=null) { + OssDto ossDto = sysOssConfigService.getOssByBusiType(commentId, "test_review_comment_"+ pageCode); + if (ossDto != null) { + data.setFiles(ossDto); + } + } return Result.ok(data); } diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/dto/ReviewCommentDto.java b/modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/dto/ReviewCommentDto.java index 356b6e8..cadad1d 100644 --- a/modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/dto/ReviewCommentDto.java +++ b/modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/dto/ReviewCommentDto.java @@ -5,6 +5,7 @@ import com.zt.life.modules.project.model.Project; import com.zt.life.modules.sysBaseInfo.model.TestAgencyInfo; import com.zt.life.modules.testReviewComment.model.TestReviewComment; +import com.zt.life.sys.dto.OssDto; import com.zt.modules.workflow.dto.FlowInfoDto; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -18,6 +19,8 @@ private Long projectId;//椤圭洰ID private String pageCode;//閰嶇疆椤圭被鍨� + @ApiModelProperty(value = "闄勪欢") + private OssDto files; @ApiModelProperty(value = "娴嬭瘯璇勫鎰忚") private TestReviewComment reviewComment; diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/model/TestReviewComment.java b/modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/model/TestReviewComment.java index cba340a..5068aa8 100644 --- a/modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/model/TestReviewComment.java +++ b/modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/model/TestReviewComment.java @@ -1,5 +1,6 @@ package com.zt.life.modules.testReviewComment.model; +import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import com.zt.common.entity.BusiEntity; @@ -35,4 +36,8 @@ @ApiModelProperty(value = "璇勫浜烘暟") private Integer reviewerNum; + @TableField(exist = false) + @ApiModelProperty(value = "椤圭洰鍚嶇О") + private String softwareName; + } diff --git a/modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/service/TestReviewCommentService.java b/modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/service/TestReviewCommentService.java index 7a93a5b..a5e6639 100644 --- a/modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/service/TestReviewCommentService.java +++ b/modules/mainPart/src/main/java/com/zt/life/modules/testReviewComment/service/TestReviewCommentService.java @@ -14,12 +14,14 @@ import com.zt.life.modules.testReviewComment.dto.ReviewCommentDto; import com.zt.life.modules.testReviewComment.model.TestReviewComment; import com.zt.life.sys.dto.OssDto; +import com.zt.life.sys.service.SysOssConfigService; import com.zt.modules.coderule.service.SysCodeRuleService; import com.zt.modules.oss.service.SysOssService; import com.zt.modules.workflow.dto.FlowInfoDto; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.zt.common.db.query.QueryFilter; + import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; @@ -28,16 +30,18 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.regex.Matcher; +import java.util.regex.Pattern; /** * test_review_comment * - * @author zt generator + * @author zt generator * @since 1.0.0 2023-12-28 */ @Service -public class TestReviewCommentService extends BaseService<TestReviewCommentDao, TestReviewComment> { +public class TestReviewCommentService extends BaseService<TestReviewCommentDao, TestReviewComment> { @Autowired private SysOssService sysOssService; @@ -46,7 +50,7 @@ private ProjectService projectService; @Autowired - private SysCodeRuleService sysCodeRuleService; + private SysOssConfigService sysOssConfigService; @Autowired private WordFileService wordFileService; @@ -61,9 +65,11 @@ * @return */ public List<TestReviewComment> page(QueryFilter queryFilter) { + String pageCode = String.valueOf(queryFilter.getParams().get("pageCode")); + pageCode=pageCode.replace("%",""); List<TestReviewComment> list = baseDao.getList(queryFilter.getQueryParams()); if (list.size() > 0) { - sysOssService.setListOsses(list, "test_review_comment"); + sysOssService.setListOsses(list, "test_review_comment_" + pageCode); } return list; } @@ -89,6 +95,7 @@ } } else { TestReviewComment reviewComment = new TestReviewComment(); + reviewComment.setPageCode(pageCode); data.setReviewComment(reviewComment); } if (projectId != null) { @@ -107,15 +114,22 @@ baseDao.insert(reviewCommentDto.getReviewComment()); commentId = reviewCommentDto.getReviewComment().getId(); } + sysOssConfigService.updateOss(reviewCommentDto.getId(), reviewCommentDto.getFiles());// 淇濆瓨闄勪欢 return commentId; } public void exportReviewComment(Long id, String pageCode, HttpServletRequest request, HttpServletResponse response) { try { ReviewCommentDto dataObj = this.getDto(id, null, pageCode); + Map<String, String> map = new HashMap<>(); + map.put("plan", "璁″垝"); + map.put("ready", "灏辩华"); + map.put("summary", "娴嬭瘯鎬荤粨"); + String type = map.get(pageCode); + dataObj.setPageCode(type); WordFile wordFile = new WordFile(); - wordFile.setModulePath("鍩虹嚎鍙戝竷涔�.docx"); - wordFile.setWordName(dataObj.getProject().getSoftwareName() + "_鍩虹嚎鍙戝竷涔�.docx"); + wordFile.setModulePath("娴嬭瘯" + type + "璇勫鎰忚.docx"); + wordFile.setWordName(dataObj.getProject().getSoftwareName() + "_娴嬭瘯" + type + "璇勫鎰忚.docx"); wordFileService.exportWordFile(request, dataObj, wordFile, response); } catch (UnsupportedEncodingException e) { e.printStackTrace(); diff --git a/modules/mainPart/src/main/resources/mapper/configAuditReport/ConfigAuditReportDao.xml b/modules/mainPart/src/main/resources/mapper/configAuditReport/ConfigAuditReportDao.xml index da5da9d..e6b9fc2 100644 --- a/modules/mainPart/src/main/resources/mapper/configAuditReport/ConfigAuditReportDao.xml +++ b/modules/mainPart/src/main/resources/mapper/configAuditReport/ConfigAuditReportDao.xml @@ -4,10 +4,11 @@ <mapper namespace="com.zt.life.modules.configAuditReport.dao.ConfigAuditReportDao"> <select id="getList" resultType="com.zt.life.modules.configAuditReport.model.ConfigAuditReport"> - select a.* + select a.*,p.software_identity,p.software_name from config_audit_report a + INNER JOIN project p ON p.id = a.project_id <where> - a.is_delete = 0 + a.is_delete = 0 and p.is_delete = 0 <if test="whereSql!=null"> and ${whereSql} </if> diff --git a/modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportDao.xml b/modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportDao.xml new file mode 100644 index 0000000..85dc710 --- /dev/null +++ b/modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportDao.xml @@ -0,0 +1,20 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +<mapper namespace="com.zt.life.modules.qaAuditReport.dao.QaAuditReportDao"> + + <select id="getList" resultType="com.zt.life.modules.qaAuditReport.model.QaAuditReport"> + select a.* + from qa_audit_report a + <where> + a.is_delete = 0 + <if test="whereSql!=null"> + and ${whereSql} + </if> + </where> + <if test="orderBySql!=null"> + ORDER BY ${orderBySql} + </if> + </select> + +</mapper> diff --git a/modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportIncongruentDao.xml b/modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportIncongruentDao.xml new file mode 100644 index 0000000..c8c70c6 --- /dev/null +++ b/modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportIncongruentDao.xml @@ -0,0 +1,33 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> + +<mapper namespace="com.zt.life.modules.qaAuditReport.dao.QaAuditReportIncongruentDao"> + + <select id="getList" resultType="com.zt.life.modules.qaAuditReport.model.QaAuditReportIncongruent"> + select a.* + from qa_audit_report_incongruent a + <where> + a.is_delete = 0 + <if test="reportId!=null"> + and a.report_id = ${reportId} + </if> + </where> + <if test="orderBySql!=null"> + ORDER BY ${orderBySql} + </if> + </select> + <select id="createList" resultType="com.zt.life.modules.qaAuditReport.model.QaAuditReportIncongruent"> + select b.code as oddNum,a.check_content as 'describe',b.page_code as discoveryPhase,b.processor as chargePerson, + case when b.processor is null then '鏈鐞�' + else '宸查棴鐜�' end as status, + a.id as src_id + from test_check_order_list a, + test_check_order b + where b.project_id = ${projectId} and b.id =a.check_order_id + and a.is_delete = 0 and b.is_delete = 0 + and a.check_result = 2 + and b.page_code in ('','','','') + order by code,no + </select> + +</mapper> diff --git a/modules/mainPart/src/main/resources/mapper/testReviewComment/TestReviewCommentDao.xml b/modules/mainPart/src/main/resources/mapper/testReviewComment/TestReviewCommentDao.xml index 4ac09fd..a63ea34 100644 --- a/modules/mainPart/src/main/resources/mapper/testReviewComment/TestReviewCommentDao.xml +++ b/modules/mainPart/src/main/resources/mapper/testReviewComment/TestReviewCommentDao.xml @@ -17,5 +17,4 @@ ORDER BY ${orderBySql} </if> </select> - </mapper> diff --git a/web/src/views/modules/configAuditReport/ConfigAuditReport-AddOrUpdate.vue b/web/src/views/modules/configAuditReport/ConfigAuditReport-AddOrUpdate.vue index d8a2415..3c0d894 100644 --- a/web/src/views/modules/configAuditReport/ConfigAuditReport-AddOrUpdate.vue +++ b/web/src/views/modules/configAuditReport/ConfigAuditReport-AddOrUpdate.vue @@ -4,13 +4,13 @@ label-width="120px" class="configAuditFormAuto"> <div> <el-form-item label-width="60px" label="缂栧彿:" style="width:100%;margin-bottom: -5px"> - <span>{{dataForm.circulatOrder.code || '缂栧彿鑷姩鐢熸垚'}}</span> + <span>{{dataForm.auditReport.code || '缂栧彿鑷姩鐢熸垚'}}</span> </el-form-item> </div> <div style="border: 1px solid rgba(0,0,0,.2);width: 99%"> <div style="border-bottom: 1px solid rgba(0,0,0,.2);" class="configAuditContentWidth"> <el-form-item class="marginTopAndMarginBottom" label="椤圭洰鍚嶇О" style="width: 48%"> - <el-input v-model="dataForm.testAgencyInfo.agencyName" placeholder="椤圭洰鍚嶇О"></el-input> + <el-input v-model="dataForm.project.softwareName" placeholder="椤圭洰鍚嶇О"></el-input> </el-form-item> <el-form-item class="marginTopAndMarginBottom" label="椤圭洰鏍囪瘑" style="width: 48%"> <el-input v-model="dataForm.project.softwareIdentity" placeholder="椤圭洰鏍囪瘑"></el-input> @@ -20,37 +20,31 @@ <div> <div style="text-align: center;font-weight: 600;border-bottom:1px solid rgba(0,0,0,.2);height: 40px;line-height: 40px;font-size: 18px">瀹℃牳鍐呭</div> <el-form-item label="鐘舵�佹爣璁�" label-width="150px" style="width:100%;padding-left:20px;margin-bottom:0"> - <zt-dict v-model="dataForm.circulatOrder.itemRequire" :radio="true" - dict="is_or_not"></zt-dict> + 鈭氬悎鏍� 脳涓嶅悎鏍� NA涓嶉�傜敤 </el-form-item> <div class="table-container"> <el-table ref="tableConfigAuditList" class="el-software el-margin-top-bot" border - :data="dataForm.technicalList" + :data="dataForm.contentList" stripe> <el-table-column prop="no" align="center" width="60" label="搴忓彿"> <template slot-scope="scope"> <span v-html="indexFormat(scope.$index)"></span> </template> </el-table-column> - <el-table-column prop="infoName" min-width="180" label="鎶�鏈祫鏂欏悕绉�"> + <el-table-column prop="auditContent" min-width="180" label="瀹℃牳鍐呭"> <template v-slot="{ row }"> - <el-input v-model="row.name" placeholder="鎶�鏈祫鏂欏悕绉�"></el-input> + <el-input v-model="row.auditContent" placeholder="瀹℃牳鍐呭"></el-input> </template> </el-table-column> - <el-table-column prop="identify" align="center" width="150" label="鏍囪瘑"> + <el-table-column prop="auditResult" align="center" width="150" label="瀹℃牳缁撴灉"> <template v-slot="{ row }"> - <el-input v-model="row.version" placeholder="鏍囪瘑"></el-input> + <zt-dict v-model="row.auditResult" placeholder="瀹℃牳缁撴灉" dict="status_tag" + clearable></zt-dict> </template> </el-table-column> <el-table-column prop="remark" label="澶囨敞" width="100" align="center"> <template v-slot="{ row }"> <el-input v-model="row.remark" placeholder="澶囨敞"></el-input> - </template> - </el-table-column> - <el-table-column fixed="right" prop="files" label="涓婁紶闄勪欢" width="300" align="center"> - <template v-slot="{ row }"> - <table-uploader busi-type="circulat_order" model-name="row" :dataForm="row" - v-model="row.files"/> </template> </el-table-column> </el-table> @@ -60,32 +54,32 @@ <div style="text-align: center;font-weight: 600;height: 40px;line-height: 40px;font-size: 18px">鍙戠幇鐨勯棶棰�</div> <div class="table-container"> <el-table ref="tableConfigAuditList" class="el-software el-margin-top-bot" border - :data="dataForm.technicalList" + :data="dataForm.problemList" stripe> <el-table-column prop="no" align="center" width="60" label="搴忓彿"> <template slot-scope="scope"> <span v-html="indexFormat(scope.$index)"></span> </template> </el-table-column> - <el-table-column prop="infoName" min-width="180" label="鎶�鏈祫鏂欏悕绉�"> + <el-table-column prop="problemDescription" min-width="180" label="闂鎻忚堪"> <template v-slot="{ row }"> - <el-input v-model="row.name" placeholder="鎶�鏈祫鏂欏悕绉�"></el-input> + <el-input v-model="row.problemDescription" placeholder="闂鎻忚堪"></el-input> </template> </el-table-column> - <el-table-column prop="identify" align="center" width="150" label="鏍囪瘑"> + <el-table-column prop="isNotTrue" align="center" width="150" label="鏄惁涓轰笉绗﹀悎椤�"> <template v-slot="{ row }"> - <el-input v-model="row.version" placeholder="鏍囪瘑"></el-input> + <zt-dict v-model="row.isNotTrue" placeholder="鏄惁涓轰笉绗﹀悎椤�" dict="is_or_not" :radio="true" + clearable></zt-dict> </template> </el-table-column> - <el-table-column prop="remark" label="澶囨敞" width="100" align="center"> + <el-table-column prop="problemRectification" label="闂鏁存敼鎯呭喌" width="100" align="center"> <template v-slot="{ row }"> - <el-input v-model="row.remark" placeholder="澶囨敞"></el-input> + <el-input v-model="row.problemRectification" placeholder="闂鏁存敼鎯呭喌"></el-input> </template> </el-table-column> - <el-table-column fixed="right" prop="files" label="涓婁紶闄勪欢" width="300" align="center"> + <el-table-column prop="discoveryPhase" label="鍙戠幇闃舵" width="100" align="center"> <template v-slot="{ row }"> - <table-uploader busi-type="circulat_order" model-name="row" :dataForm="row" - v-model="row.files"/> + <el-input v-model="row.discoveryPhase" placeholder="鍙戠幇闃舵"></el-input> </template> </el-table-column> </el-table> @@ -102,7 +96,9 @@ </div> <div class="el-border-left-right" style="width: 20%;height: 40px;"> <el-form-item style="width: 100%;padding-left:20px;margin:0;"> - {{dataForm.circulatOrder.calibratDetector}} + <el-input type="textarea" :rows="1" placeholder="璇疯緭鍏ュ鏍镐汉鍛�" + v-model="dataForm.auditReport.auditor"></el-input> + <!--{{dataForm.configAuditReport.auditor}}--> </el-form-item> </div> <div style="width: 52px;text-align: center;font-weight: 600"> @@ -110,11 +106,21 @@ </div> <div class="el-border-left" style="width: 20%;height: 40px;"> <el-form-item style="width: 100%;padding-left:20px;margin:0;"> - <!-- {{dataForm.circulatOrder.detectDate}}--> - {{ dataForm.circulatOrder.detectDate | filterTime('YYYY骞碝M鏈圖D鏃�') }} + <el-date-picker + v-model="dataForm.auditReport.auditorDate" + type="date" + placeholder="璇烽�夋嫨鏃ユ湡"> + </el-date-picker> + <!--{{ dataForm.configAuditReport.auditorDate | filterTime('YYYY骞碝M鏈圖D鏃�') }}--> </el-form-item> </div> </div> + </div> + <div class="el-flex report-sc" style="height: 60px"> + <el-form-item class="marginTopAndMarginBottom" style="width: 100%"> + <config-uploader :lineHeight="true" busi-type="config_audit_report" model-name="dataForm" :dataForm="dataForm" + v-model="dataForm.files"/> + </el-form-item> </div> </el-form> <template v-slot:footer> @@ -130,51 +136,19 @@ export default { data() { return { - // dataForm: { - // id: '', - // configAuditReport:{ - // code: '', - // auditor: '', - // auditorDate: '', - // }, - // project: { - // softwareIdentity: '', - // softwareName: '' - // }, - // problemList:[], - // contentList:[] - // }, dataForm: { id: '', - circulatOrder: { - code: '1', - itemAccept: '', - itemRequire: '', - itemOther: '', - acceptSituation: '', - acceptDate: '', - calibratDetector: '', - detectDate: '', - detectSituation: '', - warehouse: '', - warehouseDate: '', - warehouseSituation: '', - itemIssuer: '', - issueDate: '', - issueSituation: '', - remark: '', - virusLibraryVersion:'', - itemAcceptor:'' + auditReport:{ + code: '', + auditor: '', + auditorDate: '', }, project: { softwareIdentity: '', - softwareName: '', + softwareName: '' }, - testAgencyInfo: { - agencyName: '', - }, - technicalList: [], - flowInfoDto: {} + problemList:[], + contentList:[] } } }, @@ -211,7 +185,7 @@ console.log(this.dataForm, "getInfo this.dataForm") }, addConfigAuditRow() { - this.dataForm.technicalList.push({}) + this.dataForm.problemList.push({}) this.$nextTick(() => { const tableBody = this.$refs.tableConfigAuditList.$el.querySelector('.el-table__body-wrapper') tableBody.scrollTop = tableBody.scrollHeight; @@ -222,11 +196,12 @@ token: Cookies.get('token'), id:this.dataForm.id }) - let apiURL = `/configAuditReport/ConfigAuditReport/exportReport` + let apiURL = `/configAuditReport/ConfigAuditReport/exportConfigAudit` window.location.href = `${window.SITE_CONFIG['apiURL']}${apiURL}?${params}` }, // 琛ㄥ崟鎻愪氦 async formSubmit() { + console.log(this.dataForm,"formSubmit") let res = await this.$http[!this.dataForm.id ? 'post' : 'put']('/configAuditReport/ConfigAuditReport/', this.dataForm) if (res.success) { await this.$tip.success() @@ -267,4 +242,7 @@ .configAuditFormAuto .el-radio { margin-right: 10px; } +.report-sc > .el-form-item > .el-form-item__content { + width:100%; +} </style> diff --git a/web/src/views/modules/configAuditReport/ConfigAuditReport.vue b/web/src/views/modules/configAuditReport/ConfigAuditReport.vue index a316a59..00cdf63 100644 --- a/web/src/views/modules/configAuditReport/ConfigAuditReport.vue +++ b/web/src/views/modules/configAuditReport/ConfigAuditReport.vue @@ -1,7 +1,7 @@ <template> <el-card shadow="never" class="aui-card--fill"> <div class="mod-configAuditReport-configAuditReport}"> - <zt-table-wraper query-url="/configAuditReport/ConfigAuditReport/page" delete-url="/configAuditReport/ConfigAuditReport" v-slot="{ table }"> + <zt-table-wraper query-url="/configAuditReport/ConfigAuditReport/page" delete-url="/configAuditReport/ConfigAuditReport/deleteConfigAudit" v-slot="{ table }"> <el-form :inline="true" :model="dataForm" @keyup.enter.native="table.query()"> <el-form-item> <el-input v-model="dataForm.code" placeholder="璇疯緭鍏ョ紪鍙�" clearable></el-input> @@ -21,9 +21,15 @@ <el-table v-loading="table.dataLoading" :data="table.dataList" height="100px" v-adaptive="{bottomOffset:70}" border @selection-change="table.selectionChangeHandle"> <el-table-column type="selection" width="40"/> <el-table-column prop="code" label="缂栧彿"/> - <el-table-column prop="softwareIdentity" label="缂栧彿"/> - <el-table-column prop="softwareName" label="缂栧彿"/> - <zt-table-column-handle :table="table" edit-perm="configAuditReport:update" delete-perm="configAuditReport::delete"/> + <el-table-column prop="softwareName" label="椤圭洰鍚嶇О"/> + <el-table-column prop="softwareIdentity" label="椤圭洰鏍囪瘑"/> + <zt-table-column-handle :table="table" edit-perm="configAuditReport:update" delete-perm="configAuditReport::delete"> + <template v-slot="{ row }"> + <zt-table-button size="small" v-show = "row.accessoryMap" type="primary" + @click="preview(row)">棰勮 + </zt-table-button> + </template> + </zt-table-column-handle> </el-table> <!-- 寮圭獥, 鏂板 / 淇敼 --> <add-or-update ref="addOrUpdate" @refreshDataList="table.query"/> diff --git a/web/src/views/modules/contractReview/ContractReview-AddOrUpdate.vue b/web/src/views/modules/contractReview/ContractReview-AddOrUpdate.vue index 2dba46d..0c49fec 100644 --- a/web/src/views/modules/contractReview/ContractReview-AddOrUpdate.vue +++ b/web/src/views/modules/contractReview/ContractReview-AddOrUpdate.vue @@ -129,7 +129,6 @@ <el-button v-if="dataForm.disabled" type="primary" @click="print()">鎵撳嵃</el-button> </template> </zt-dialog> - </template> <script> @@ -183,6 +182,7 @@ let params = { reviewId: this.dataForm.id, projectId: this.dataForm.projectId + } let res = await this.$http.get(`/contractReview/ContractReview/getDto`, {params: params}) this.dataForm = { diff --git a/web/src/views/modules/qaAuditReport/QaAuditReport-AddOrUpdate.vue b/web/src/views/modules/qaAuditReport/QaAuditReport-AddOrUpdate.vue new file mode 100644 index 0000000..b9dc1b4 --- /dev/null +++ b/web/src/views/modules/qaAuditReport/QaAuditReport-AddOrUpdate.vue @@ -0,0 +1,243 @@ +<template> + <zt-dialog ref="dialog" column="3" :title="title" :stepMarker="stepMarker" @confirm="formSubmit"> + <el-form ref="dataForm" style="padding-top: 0" :inline="true" :disabled="dataForm.disabled" :model="dataForm" + label-width="120px" class="contractFormAuto"> + <div> + <el-form-item label-width="60px" label="缂栧彿:" style="width:100%;margin-bottom: -5px"> + <span>{{ dataForm.auditReport.code || '缂栧彿鑷姩鐢熸垚' }}</span> + </el-form-item> + </div> + <div style="border: 1px solid rgba(0,0,0,.2);width: 99%"> + <div style="border-bottom: 1px solid rgba(0,0,0,.2);" class="contractContentWidth"> + <el-form-item class="marginTopAndMarginBottom" label="瀹㈡埛鍚嶇О" style="width: 49%"> + <el-input v-model="dataForm.testAgencyInfo.agencyName" placeholder="璇疯緭鍏ュ鎴峰悕绉�"></el-input> + </el-form-item> + <el-form-item class="marginTopAndMarginBottom" label="鑱旂郴鐢佃瘽" style="width: 49%"> + <el-input v-model="dataForm.testAgencyInfo.labContactNum" placeholder="璇疯緭鍏ヨ仈绯荤數璇�"></el-input> + </el-form-item> + <el-form-item class="marginTopAndMarginBottom reviewLeft" style="width: 49%"> + <zt-dict v-model="dataForm.contractReview.reviewType" :radio="true" dict="review_type"></zt-dict> + </el-form-item> + <el-form-item label-width="160px" class="lastChild" label="鍘熷鎵樺崟缂栧彿:" style="width: 49%"> + <span>{{ dataForm.contractReview.orderCode }}</span> + </el-form-item> + </div> + <div class="el-flexContractDialog el-border-bottom"> + <div class="DFormWidth DAlign DHold"> + 璇勫椤圭洰 + </div> + <div class="el-border-left" style="width: calc(100% - 120px)"> + <div class="table-container"> + <el-table ref="tableConfigItemList" class="el-software el-margin-top-bot" + style="width: 99%;margin-left: 5px" border :data="dataForm.reviewItemList" + stripe> + <el-table-column prop="no" align="center" width="60" label="搴忓彿"> + <template slot-scope="scope"> + <span v-html="indexFormat(scope.$index)"></span> + </template> + </el-table-column> + <el-table-column prop="item" min-width="400" label="璇勫椤�"> + <template v-slot="{ row }"> + <el-input v-model="row.item" placeholder="璇勫椤�"></el-input> + </template> + </el-table-column> + <el-table-column prop="result" width="220" align="center" label="璇勫缁撴灉"> + <template v-slot="{ row }"> + <zt-dict v-model="row.result" placeholder="璇勫缁撴灉" dict="tristate1" :radio="true" + clearable></zt-dict> + </template> + </el-table-column> + </el-table> + </div> + </div> + </div> + <div class="el-flexContractDialog el-border-bottom"> + <div class="DFormWidth DAlign DHold"> + 璇勫璁板綍 + </div> + <div style="width: calc(100% - 120px)" class="el-border-left"> + <el-form-item class="el-CMTextarea" label-width="20px" style="width: 100%;padding: 5px"> + <el-input type="textarea" :rows="2" placeholder="璇疯緭鍏ュ唴瀹�" + v-model="dataForm.contractReview.reviewRecord"></el-input> + </el-form-item> + </div> + </div> + <div class="el-flexContractDialog el-border-bottom"> + <div class="DFormWidth DAlign DHold"> + 瀹㈡埛鐨勭壒娈婅姹� + </div> + <div style="width: calc(100% - 120px)" class="el-border-left"> + <el-form-item class="el-CMTextarea" style="width: 100%;padding: 5px"> + <el-input type="textarea" :rows="2" placeholder="璇疯緭鍏ュ唴瀹�" + v-model="dataForm.contractReview.specialRequire"></el-input> + </el-form-item> + </div> + </div> + <div class="el-flexContractDialog el-border-bottom"> + <div class="DFormWidth DAlign DHold"> + 鍒嗗寘 + </div> + <div style="width: calc(100% - 120px)" class="el-border-left"> + <el-form-item class="el-CMTextarea" style="width: 100%;padding: 5px"> + <el-input type="textarea" :rows="2" placeholder="璇疯緭鍏ュ唴瀹�" + v-model="dataForm.contractReview.subcontract"></el-input> + </el-form-item> + </div> + </div> + <div class="el-flexContractDialog el-border-bottom"> + <div class="DFormWidth DAlign DHold"> + 璇勫缁撹 + </div> + <div style="width: calc(100% - 120px)" class="el-border-left"> + <el-form-item class="el-CMTextarea" style="width: 100%;padding: 5px"> + <el-input type="textarea" :rows="2" placeholder="璇疯緭鍏ヨ瘎瀹$粨璁�" + v-model="dataForm.contractReview.reviewConclusion"></el-input> + </el-form-item> + <el-form-item label="鎶�鏈礋璐d汉锛�" style="width: 48%"> + <el-input type="textarea" :rows="1" placeholder="璇疯緭鍏ユ妧鏈礋璐d汉" + v-model="dataForm.contractReview.technicalDirector"></el-input> + </el-form-item> + <el-form-item label="鏃ユ湡锛�" style="width: 48%"> + <el-date-picker + v-model="dataForm.contractReview.reviewDate" + type="date" + placeholder="璇烽�夋嫨鏃ユ湡"> + </el-date-picker> + </el-form-item> + </div> + </div> + <div class="el-flexContractDialog"> + <div class="DFormWidth DAlign DHold"> + 璇勫缁勬垚鍛� + </div> + <div style="width: calc(100% - 120px)" class="el-border-left"> + <el-form-item class="el-CMTextarea" style="width: 100%;padding: 5px"> + <el-input type="textarea" :rows="2" placeholder="璇疯緭鍏ュ唴瀹�" + v-model="dataForm.contractReview.reviewPanelMember"></el-input> + </el-form-item> + </div> + </div> + </div> + <div class="el-flex review-sc" style="height: 60px"> + <el-form-item class="marginTopAndMarginBottom" style="width: 100%"> + <config-uploader :lineHeight="true" busi-type="qa_audit_report" model-name="dataForm" :dataForm="dataForm" + v-model="dataForm.files"/> + </el-form-item> + </div> + </el-form> + <template v-slot:footer> + <el-button v-if="dataForm.disabled" type="primary" @click="print()">鎵撳嵃</el-button> + </template> + </zt-dialog> +</template> + +<script> + import qs from "qs"; + import Cookies from "js-cookie"; + + export default { + data() { + return { + stepMarker: '', + dataForm: { + auditReport: { + code: '', + completedCheck: '', + qaSummary: '', + checker: '', + checkDate: '', + supervisorOpinion: '', + supervisorSign: '', + superviseDate: '', + }, + id: '', + project:{ + softwareIdentity: '', + softwarName: '', + }, + incongruentList:[] + } + } + }, + methods: { + indexFormat(index) { + return index += 1 + }, + init(id, row) { + if (id) { + this.dataForm.id = id + } else { + this.dataForm.id = row.id + } + if (row.projectId) { + this.dataForm.projectId = row.projectId + } + + // this.dataForm.disabled + this.getInfo() + if (!this.dataForm.disabled) { + if (!row.stepMarker) { + this.stepMarker = 'qashbg_first' + this.title = 'QA瀹℃牳鎶ュ憡' + } else { + this.title = row.stepName + this.stepMarker = row.stepMarker + } + } + console.log(this.dataForm.id, this.dataForm.projectId, this.stepMarker, 'this.dataForm.id, this.dataForm.projectId,this.stepMarker') + }, + addCirculatRow() { + this.dataForm.technicalList.push({}) + this.$nextTick(() => { + const tableBody = this.$refs.tableCirculatOrderList.$el.querySelector('.el-table__body-wrapper') + tableBody.scrollTop = tableBody.scrollHeight; + }) + }, + // 鑾峰彇淇℃伅 + async getInfo() { + let params = { + reportId: this.dataForm.id, + projectId: this.dataForm.projectId + } + let res = await this.$http.get(`/qaAuditReport/QaAuditReport/getDto`, {params: params}) + this.dataForm = { + ...this.dataForm, + ...res.data + } + if (this.dataForm.project === null) { + this.dataForm.project = {} + } + if (this.dataForm.flowInfoDto === null) { + this.dataForm.flowInfoDto = {} + } + console.log(this.dataForm, "getInfo this.dataForm") + }, + async print() { + var params = qs.stringify({ + token: Cookies.get('token'), + id: this.dataForm.id + }) + let apiURL = `/qaAuditReport/QaAuditReport/exportQaReport` + window.location.href = `${window.SITE_CONFIG['apiURL']}${apiURL}?${params}` + }, + // 琛ㄥ崟鎻愪氦 + async formSubmit(submitType) { + console.log(this.dataForm, "this.dataForm11111") + if (submitType == 'tj' || submitType == 'bl') { + let flowInfo = { + flowCode: 'qashbg', + stepIdMark: this.stepMarker, + submitType: submitType + } + this.dataForm.flowInfoDto = flowInfo; + } + let res = await this.$http[!this.dataForm.id ? 'post' : 'put']('/qaAuditReport/QaAuditReport/', this.dataForm) + if (res.success) { + await this.$tip.success() + this.$refs.dialog.close() + this.$emit('refreshDataList') + } + } + } + } +</script> diff --git a/web/src/views/modules/qaAuditReport/QaAuditReport.vue b/web/src/views/modules/qaAuditReport/QaAuditReport.vue new file mode 100644 index 0000000..73aeb47 --- /dev/null +++ b/web/src/views/modules/qaAuditReport/QaAuditReport.vue @@ -0,0 +1,80 @@ +<template> + <el-card shadow="never" class="aui-card--fill"> + <div class="mod-qaAuditReport-qaAuditReport}"> + <zt-table-wraper query-url="/qaAuditReport/QaAuditReport/page" delete-url="/qaAuditReport/QaAuditReport/deleteQaReport" v-slot="{ table }"> + <el-form :inline="true" :model="dataForm" @keyup.enter.native="table.query()"> + <el-form-item> + <el-input v-model="dataForm.code" placeholder="璇疯緭鍏ョ紪鍙�" clearable></el-input> + </el-form-item> + <el-form-item> + <el-input v-model="dataForm.softwareName" placeholder="璇疯緭鍏ラ」鐩悕绉�" clearable></el-input> + </el-form-item> + <el-form-item> + <el-input v-model="dataForm.softwareIdentity" placeholder="璇疯緭鍏ラ」鐩爣璇�" clearable></el-input> + </el-form-item> + <el-form-item> + <zt-button type="query" @click="table.query()"/> + <zt-button type="primary" class="el-icon-edit" perm="itemCirculatOrder:add" @click="add()">鏂板</zt-button> + <zt-button type="delete" perm="qaAuditReport:delete" @click="table.deleteHandle()"/> + </el-form-item> + </el-form> + <el-table v-loading="table.dataLoading" :data="table.dataList" height="100px" v-adaptive="{bottomOffset:70}" border @selection-change="table.selectionChangeHandle"> + <el-table-column type="selection" width="40"/> + <el-table-column prop="code" label="缂栧彿"/> + <el-table-column prop="softwareName" label="椤圭洰鍚嶇О"/> + <el-table-column prop="softwareIdentity" label="椤圭洰鏍囪瘑"/> + <zt-table-column-handle :table="table" edit-perm="qaAuditReport:update" delete-perm="qaAuditReport::delete"> + <template v-slot="{ row }"> + <zt-table-button size="small" v-show = "row.accessoryMap" type="primary" + @click="preview(row)">棰勮 + </zt-table-button> + </template> + </zt-table-column-handle> + </el-table> + <!-- 寮圭獥, 鏂板 / 淇敼 --> + <add-or-update @refreshDataList="table.query"/> + <ProjectSelect ref="projectSelect" + @refreshDataList="table.query" + @setProjectInfo="openAddWin"> + </ProjectSelect> + <Preview ref="view" :pageMarkerfun="QaAuditReport"></Preview> + </zt-table-wraper> + </div> + </el-card> +</template> + +<script> + import AddOrUpdate from './QaAuditReport-AddOrUpdate' + import Preview from '@/views/pages/view' + import ProjectSelect from "../project/Project-select"; + export default { + data() { + return { + QaAuditReport:'QaAuditReport', + dataForm: { + code: '', + softwareName:'', + softwareIdentity:'' + } + } + }, + components: { + AddOrUpdate, + ProjectSelect, + Preview + }, + methods:{ + add() { + this.$refs.projectSelect.$refs.dialog.init("qa_audit_report") + }, + openAddWin(row) { + console.log(row.id, 'row.id') + // this.$refs.addOrUpdate.$refs.dialog.init(null, {id: null, projectId: row.id}) + this.$refs.addOrUpdate.$refs.dialog.init(null, {id: null, projectId: row.id}) + }, + preview(row){ + this.$refs.view.openAccessoryFormatSingle(row) + } + } + } +</script> diff --git a/web/src/views/modules/testReviewComment/TestReviewComment-AddOrUpdate.vue b/web/src/views/modules/testReviewComment/TestReviewComment-AddOrUpdate.vue index 89b896a..6c6da59 100644 --- a/web/src/views/modules/testReviewComment/TestReviewComment-AddOrUpdate.vue +++ b/web/src/views/modules/testReviewComment/TestReviewComment-AddOrUpdate.vue @@ -1,19 +1,31 @@ <template> <zt-dialog ref="dialog" @confirm="formSubmit"> <el-form :model="dataForm" ref="dataForm" :disabled="dataForm.disabled" label-width="120px"> - <zt-form-item label="杞欢鍚嶇О" prop="reviewDate" rules="required"> + <zt-form-item label="杞欢鍚嶇О" prop="reviewDate" > <el-input v-model="dataForm.project.softwareName"></el-input> </zt-form-item> - <zt-form-item label="璇勫鏃ユ湡" prop="reviewDate" rules="required"> + <zt-form-item label="杞欢缂栧彿" prop="reviewDate" > + <el-input v-model="dataForm.project.code"></el-input> + </zt-form-item> + <zt-form-item label="杞欢鏍囪瘑" prop="reviewDate" > + <el-input v-model="dataForm.project.softwareIdentity"></el-input> + </zt-form-item> + <zt-form-item label="璇勫鏃ユ湡" prop="reviewDate" > <el-date-picker v-model="dataForm.reviewComment.reviewDate" type="date" placeholder="璇烽�夋嫨璇勫鏃ユ湡"> </el-date-picker> </zt-form-item> - <zt-form-item label="璇勫浜烘暟" prop="reviewerNum" rules="required"> + <zt-form-item label="璇勫浜烘暟" prop="reviewerNum" > <el-input v-model="dataForm.reviewComment.reviewerNum"></el-input> </zt-form-item> + <div style="height: 60px"> + <el-form-item > + <config-uploader :lineHeight="true" :busi-type="type" model-name="dataForm" :dataForm="dataForm" + v-model="dataForm.files"/> + </el-form-item> + </div> </el-form> <template v-slot:footer> <el-button v-if="dataForm.disabled" type="primary" @click="print()">鎵撳嵃</el-button> @@ -28,11 +40,14 @@ export default { data() { return { + type:'test_review_comment_', pageCode: '', dataForm: { id: '', project: { softwareName: '', + softwareIdentity:'', + code:'' }, reviewComment: { reviewDate: '', @@ -69,6 +84,7 @@ ...this.dataForm, ...res.data } + this.type=this.type+this.pageCode console.log(this.dataForm, 'this.dataForm this.dataForm') }, async print() { @@ -77,7 +93,7 @@ id: this.dataForm.id, pageCode: this.pageCode }) - let apiURL = `/testReviewComment/TestReviewComment/exportComment` + let apiURL = `/testReviewComment/TestReviewComment/exportReviewComment` window.location.href = `${window.SITE_CONFIG['apiURL']}${apiURL}?${params}` }, // 琛ㄥ崟鎻愪氦 @@ -92,3 +108,10 @@ } } </script> +<style> + .marginTopAndMarginBottom { + margin-top: 0 !important; + margin-bottom: 0 !important; + } +</style> + diff --git a/web/src/views/modules/testReviewComment/TestReviewComment.vue b/web/src/views/modules/testReviewComment/TestReviewComment.vue index c97e935..dbe7e9f 100644 --- a/web/src/views/modules/testReviewComment/TestReviewComment.vue +++ b/web/src/views/modules/testReviewComment/TestReviewComment.vue @@ -1,7 +1,7 @@ <template> <el-card shadow="never" class="aui-card--fill"> <div class="mod-testReviewComment-testReviewComment}"> - <zt-table-wraper query-url="/testReviewComment/TestReviewComment/page" delete-url="/testReviewComment/TestReviewComment" v-slot="{ table }"> + <zt-table-wraper query-url="/testReviewComment/TestReviewComment/page" delete-url="/testReviewComment/TestReviewComment/deleteReviewComment" v-slot="{ table }"> <el-form :inline="true" :model="dataForm" @keyup.enter.native="table.query()"> <el-form-item> <el-input v-model="dataForm.code" placeholder="璇疯緭鍏ユ祴璇曡瘎瀹$紪鍙�" clearable></el-input> @@ -17,19 +17,21 @@ </el-form> <el-table v-loading="table.dataLoading" :data="table.dataList" height="100px" v-adaptive="{bottomOffset:70}" border @selection-change="table.selectionChangeHandle"> <el-table-column type="selection" width="40"/> - <el-table-column prop="code" label="娴嬭瘯璇勫缂栧彿"/> <el-table-column prop="reviewDate" label="璇勫鏃ユ湡"/> <el-table-column prop="softwareName" label="椤圭洰鍚嶇О"/> + <el-table-column prop="softwareIdentity" label="椤圭洰鏍囪瘑"/> <zt-table-column-handle :table="table" :hasEdit='false' edit-perm="testReviewComment:update" delete-perm="testCheckOrder::delete"> <template v-slot="{row}"> + <zt-table-button size="small" v-show = "row.accessoryMap" type="primary" + @click="preview(row)">棰勮 + </zt-table-button> <zt-table-button type="primary" @click="openEditWin(row)">淇敼</zt-table-button> </template> - </zt-table-column-handle> </el-table> <!-- 寮圭獥, 鏂板 / 淇敼 --> - <add-or-update ref="addOrUpdate" @recall="table.query"/> + <add-or-update ref="addOrUpdate" @refreshDataList="table.query"/> <ProjectSelect :pageCode="pageCode" ref="projectSelect" @refreshDataList="table.query" @setProjectInfo="openAddWin"> @@ -50,7 +52,6 @@ TestReviewComment:'TestReviewComment', pageCode: '', dataForm: { - code: '', softwareName: '', pageCode:this.$route.query.pageCode } diff --git a/zt/core/src/main/java/com/zt/modules/sys/dao/SysUserDao.java b/zt/core/src/main/java/com/zt/modules/sys/dao/SysUserDao.java index e0bfd82..57d0482 100644 --- a/zt/core/src/main/java/com/zt/modules/sys/dao/SysUserDao.java +++ b/zt/core/src/main/java/com/zt/modules/sys/dao/SysUserDao.java @@ -56,5 +56,5 @@ Integer checkTestHome(String systemId, Long userId); List<SysUser> getUsersList(); - String getUsersName(Long id); + String getUsersName(String id); } diff --git a/zt/core/src/main/java/com/zt/modules/sys/service/SysUserService.java b/zt/core/src/main/java/com/zt/modules/sys/service/SysUserService.java index 9149cc0..ae65be8 100644 --- a/zt/core/src/main/java/com/zt/modules/sys/service/SysUserService.java +++ b/zt/core/src/main/java/com/zt/modules/sys/service/SysUserService.java @@ -335,10 +335,19 @@ return baseDao.getUsersList(); } - public String getUsersName(Long id) { + public String getUsersName(String id) { return baseDao.getUsersName(id); } + public String getNames(String ids) { + String[] NamesData = ids.split(","); + List<String> nameList =new ArrayList<>(); + for (String item : NamesData) { + nameList.add(this.getUsersName(item)); + } + String names = String.join(", ", nameList); + return names; + } public SysUser getUserInfo(Long id) { SysUser data = super.get(id); if (data != null) { diff --git a/zt/core/src/main/resources/mapper/sys/SysUserDao.xml b/zt/core/src/main/resources/mapper/sys/SysUserDao.xml index 3fd5d17..c26633b 100644 --- a/zt/core/src/main/resources/mapper/sys/SysUserDao.xml +++ b/zt/core/src/main/resources/mapper/sys/SysUserDao.xml @@ -241,7 +241,7 @@ select real_name as name,id as id from sys_user </select> <select id="getUsersName" resultType="java.lang.String"> - select real_name from sys_user WHERE id=#{id} + select real_name from sys_user WHERE id=${id} </select> <update id="updatePassword"> update -- Gitblit v1.9.1