jinlin
2024-01-10 cdf29a8f6fb9990f82ccc1d3f47bfba48cfaf4fc
修改
47个文件已修改
20个文件已添加
1837 ■■■■ 已修改文件
core/src/main/java/com/zt/life/sys/controller/UserExtController.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/model/ItemCirculatOrder.java 26 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/service/ItemCirculatOrderService.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/controller/ProjectController.java 42 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/dto/ProjectUserDto.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/model/Project.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/project/model/ProjectUserName.java 28 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/controller/QaAuditReportController.java 21 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/model/QaAuditReport.java 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/model/QaAuditReportIncongruent.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/service/QaAuditReportService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/controller/RiskMeasureController.java 95 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/controller/RiskTraceItemController.java 111 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/controller/RiskTraceRecordController.java 96 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dao/RiskMeasureDao.java 24 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dao/RiskTraceItemDao.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dao/RiskTraceRecordDao.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dto/RiskTraceDto.java 35 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/model/RiskMeasure.java 133 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/model/RiskTraceItem.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/model/RiskTraceRecord.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/service/RiskMeasureService.java 41 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/service/RiskTraceItemService.java 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/service/RiskTraceRecordService.java 47 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportDao.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportIncongruentDao.xml 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/riskTraceRecord/RiskMeasureDao.xml 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/riskTraceRecord/RiskTraceItemDao.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
modules/mainPart/src/main/resources/mapper/riskTraceRecord/RiskTraceRecordDao.xml 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/packages/components/zt-dialog/src/zt-dialog.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/packages/components/zt-select/src/zt-select.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/packages/components/zt-tree-dialog-selector/src/zt-tree-dialog-selector.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/packages/views/modules/sys/dict-type.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/packages/views/modules/sys/role-user-deit.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/packages/views/modules/sys/role-user.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/packages/views/modules/sys/role.vue 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/public/index.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/configItemWarehouse/ConfigItemWarehouse-AddOrUpdate.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue 36 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/project/Project-AddOrUpdate.vue 146 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/project/Project.vue 4 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/project/SoftwareTestOrder-AddOrUpdate.vue 22 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/qaAuditReport/QaAuditReport-AddOrUpdate.vue 140 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/qaAuditReport/QaAuditReport.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/riskTraceRecord/RiskTraceItem-AddOrUpdate.vue 69 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/riskTraceRecord/RiskTraceItem.vue 78 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/sys/task/already-task.vue 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/sys/task/stay-task.vue 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/src/views/modules/sys/workflowConfig/workflow-config-add-update.vue 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
web/vue.config.js 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/common/src/main/java/com/zt/core/sys/model/SysDept.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/core/src/main/java/com/zt/modules/sys/controller/SysDeptController.java 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/core/src/main/java/com/zt/modules/sys/controller/SysRoleController.java 11 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/core/src/main/java/com/zt/modules/sys/controller/SysUserController.java 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/core/src/main/java/com/zt/modules/sys/dao/SysDeptDao.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/core/src/main/java/com/zt/modules/sys/dao/SysUserDao.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/core/src/main/java/com/zt/modules/sys/service/SysDeptService.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/core/src/main/java/com/zt/modules/sys/service/SysUserService.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/core/src/main/java/com/zt/modules/workflow/dao/WfRunTaskDao.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/core/src/main/java/com/zt/modules/workflow/dto/BizInfoDto.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/core/src/main/java/com/zt/modules/workflow/service/WorkflowService.java 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/core/src/main/resources/mapper/log/SysLogLoginDao.xml 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/core/src/main/resources/mapper/log/SysLogOperationDao.xml 31 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/core/src/main/resources/mapper/sys/SysDeptDao.xml 6 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/core/src/main/resources/mapper/sys/SysUserDao.xml 29 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/core/src/main/resources/mapper/workflow/WfRunTaskDao.xml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
zt/core/src/main/resources/mapper/workflowconfig/WfDefStepDao.xml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
core/src/main/java/com/zt/life/sys/controller/UserExtController.java
@@ -2,6 +2,7 @@
import com.zt.life.sys.model.SysUserReg;
import com.zt.life.sys.model.SysUserRegister;
import com.zt.modules.sys.dto.UserDto;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@@ -91,7 +92,7 @@
    @ApiOperation("返回用户列表")
    @LogOperation("返回用户列表")
    public Result<List<SysUser>> getUsersList() {
         return Result.ok(sysUserService.getUsersList());
         return Result.ok(sysUserService.getUsersList("",""));
    }
}
modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/model/ItemCirculatOrder.java
@@ -51,6 +51,32 @@
    @ApiModelProperty(value = "病毒库版本")
    private String virusLibraryVersion;
    @ApiModelProperty(value = "检测接收人")
    private String detectAcceptor;
    @ApiModelProperty(value = "检测接收人ID")
    private String detectAcceptorId;
    @ApiModelProperty(value = "检测接收时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date detectAcceptDate;
    @ApiModelProperty(value = "检测接收情况说明")
    private String detectAcceptSituation;
    @ApiModelProperty(value = "入库人")
    private String depositor;
    @ApiModelProperty(value = "入库人ID")
    private String depositorId;
    @ApiModelProperty(value = "入库时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date depositDate;
    @ApiModelProperty(value = "入库情况说明")
    private String depositSituation;
    @ApiModelProperty(value = "校准检测人")
    private String calibratDetector;
modules/mainPart/src/main/java/com/zt/life/modules/itemCirculatOrder/service/ItemCirculatOrderService.java
@@ -201,6 +201,10 @@
            dataObj.getCirculatOrder().setCalibratDetector(detectorPath);
            String issuerPath = "文件图片:" + getFilesPath.getSignPath(Convert.toLong(dataObj.getCirculatOrder().getItemIssuerId()));
            dataObj.getCirculatOrder().setItemIssuer(issuerPath);
            String depositPath = "文件图片:" + getFilesPath.getSignPath(Convert.toLong(dataObj.getCirculatOrder().getDepositorId()));
            dataObj.getCirculatOrder().setDepositor(depositPath);
            String detectAcceptorPath = "文件图片:" + getFilesPath.getSignPath(Convert.toLong(dataObj.getCirculatOrder().getDetectAcceptorId()));
            dataObj.getCirculatOrder().setDetectAcceptor(detectAcceptorPath);
            //通用字典列表字符串生成
            String itemRequireStr = getShowDictList.getShowDictList(dataObj.getCirculatOrder().getItemRequire(), "is_or_not", false);
            dataObj.getCirculatOrder().setItemRequireStr(itemRequireStr);
@@ -214,6 +218,12 @@
            String issueSituationStr = getShowDictList.getShowDictList(dataObj.getCirculatOrder().getIssueSituation(), "is_or_not", false);
            dataObj.getCirculatOrder().setIssueSituationStr(issueSituationStr);
            String depositSituation = getShowDictList.getShowDictList(dataObj.getCirculatOrder().getDepositSituation(), "is_or_not", false);
            dataObj.getCirculatOrder().setDepositSituation(depositSituation);
            String detectAcceptSituation = getShowDictList.getShowDictList(dataObj.getCirculatOrder().getDetectAcceptSituation(), "is_or_not", false);
            dataObj.getCirculatOrder().setDetectAcceptSituation(detectAcceptSituation);
            for (ItemCirculatOrderTechnical technical : dataObj.getTechnicalList()) {
                String value = technical.getSecretClass();
                String secretClassStr = getShowDictList.getShowDictList(value, "secret_class", false);
modules/mainPart/src/main/java/com/zt/life/modules/project/controller/ProjectController.java
@@ -13,6 +13,9 @@
import com.zt.common.validator.group.AddGroup;
import com.zt.common.validator.group.DefaultGroup;
import com.zt.common.validator.group.UpdateGroup;
import com.zt.core.context.UserContext;
import com.zt.core.sys.model.SysUser;
import com.zt.life.modules.project.dto.ProjectUserDto;
import com.zt.life.modules.project.model.Project;
import com.zt.life.modules.project.service.ProjectService;
import com.zt.modules.coderule.service.SysCodeRuleService;
@@ -71,6 +74,13 @@
            queryFilter.getParams().replace("tableName","");
        }
        List<Project> Project =projectService.page(queryFilter);
        for (Project project2 :Project){
            String leaderName = project2.getProjectLeader();
            if (leaderName.length()>10){
                leaderName=sysUserService.getNames(leaderName);
            }
            project2.setProjectLeader(leaderName);
        }
        return PageResult.ok(Project);
    }
@@ -78,6 +88,9 @@
    @ApiOperation("信息")
    public Result<Project> get(@PathVariable("id") Long id) {
        Project data = projectService.get(id);
        if (data.getBizDeptId() == null) {
            data.setBizDeptId(UserContext.getDeptId().toString());
        }
        return Result.ok(data);
    }
@@ -94,8 +107,6 @@
        map.put("year", year);
        project.setYear(year);
        project.setCode(sysCodeRuleService.getNewCode(map));
        String leaderName = sysUserService.getUsersName(project.getProjectLeader());
        project.setProjectLeader(leaderName);
        projectService.insert(project);
        return Result.ok();
    }
@@ -106,21 +117,6 @@
    public Result update(@RequestBody Project project) {
        //效验数据
        ValidatorUtils.validateEntity(project, UpdateGroup.class, DefaultGroup.class);
        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();
    }
@@ -136,4 +132,16 @@
        return Result.ok();
    }
    @GetMapping("getUsersLists")
    @ApiOperation("返回用户列表")
    @LogOperation("返回用户列表")
    public Result<ProjectUserDto> getUsersLists(String deptId) {
        ProjectUserDto projectUserDto = new ProjectUserDto();
        projectUserDto.setZrr(sysUserService.getUsersList("zrr", deptId));
        projectUserDto.setCsry(sysUserService.getUsersList("csry", deptId));
        projectUserDto.setShry(sysUserService.getUsersList("shry", deptId));
        projectUserDto.setPzry(sysUserService.getUsersList("pzry", deptId));
        return Result.ok(projectUserDto);
    }
}
modules/mainPart/src/main/java/com/zt/life/modules/project/dto/ProjectUserDto.java
New file
@@ -0,0 +1,20 @@
package com.zt.life.modules.project.dto;
import com.zt.core.sys.model.SysUser;
import com.zt.life.modules.project.model.*;
import com.zt.life.modules.sysBaseInfo.model.TestAgencyInfo;
import com.zt.life.sys.dto.OssDto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class ProjectUserDto {
    private List<SysUser> zrr;
    private List<SysUser> csry;
    private List<SysUser> shry;
    private List<SysUser> pzry;
    }
modules/mainPart/src/main/java/com/zt/life/modules/project/model/Project.java
@@ -75,6 +75,12 @@
    @ApiModelProperty(value = "项目审核人员")
    private String projectReviewer;
    @ApiModelProperty(value = "项目配置人员")
    private String projectConfiger;
    @ApiModelProperty(value = "业务部门ID")
    private String bizDeptId;
    @ApiModelProperty(value = "是否签署合同")
    private Integer isContract;
modules/mainPart/src/main/java/com/zt/life/modules/project/model/ProjectUserName.java
New file
@@ -0,0 +1,28 @@
package com.zt.life.modules.project.model;
import com.baomidou.mybatisplus.annotation.TableName;
import com.zt.common.entity.BusiEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
 * project
 *
 * @author zt generator
 * @since 1.0.0 2023-11-07
 */
@Data
public class ProjectUserName {
    @ApiModelProperty(value = "项目负责人")
    private String projectLeaderName;
    @ApiModelProperty(value = "项目测试人员")
    private String projectTestersName;
    @ApiModelProperty(value = "项目审核人员")
    private String projectReviewerName;
    @ApiModelProperty(value = "项目配置人员")
    private String projectConfigerName;
}
modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/controller/QaAuditReportController.java
@@ -13,12 +13,14 @@
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.project.model.ProjectUserName;
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 com.zt.modules.sys.service.SysUserService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@@ -53,6 +55,9 @@
    @Autowired
    private SysOssConfigService sysOssConfigService;
    @Autowired
    private SysUserService sysUserService;
    @GetMapping("page")
    @ApiOperation("分页")
    @ApiImplicitParams({
@@ -60,7 +65,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 = "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")
    })
    public PageResult<QaAuditReport> page(@ApiIgnore @QueryParam QueryFilter queryFilter){
        return PageResult.ok(qaAuditReportService.page(queryFilter));
    }
@@ -120,4 +128,15 @@
        qaAuditReportService.exportQaReport(id, request, response);
    }
    @GetMapping("getNameById")
    @ApiOperation("用户名")
    public Result<ProjectUserName> getNameById(String projectLeaderId, String projectTestersId, String projectConfigerId) {
        ProjectUserName name =new ProjectUserName();
        if (projectLeaderId.length()>10||projectTestersId.length()>10||projectConfigerId.length()>10){
            name.setProjectLeaderName(sysUserService.getNames(projectLeaderId));
            name.setProjectTestersName(sysUserService.getNames(projectTestersId));
            name.setProjectConfigerName(sysUserService.getNames(projectConfigerId));
        }
        return  Result.ok(name);
    }
}
modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/model/QaAuditReport.java
@@ -1,5 +1,6 @@
package com.zt.life.modules.qaAuditReport.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;
@@ -60,4 +61,12 @@
    @ApiModelProperty(value = "年份")
    private String year;
    @TableField(exist = false)
    @ApiModelProperty(value = "项目标识")
    private String softwareName;
    @TableField(exist = false)
    @ApiModelProperty(value = "项目名称")
    private String softwareIdentity;
}
modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/model/QaAuditReportIncongruent.java
@@ -34,7 +34,7 @@
    private String oddNum;
    @ApiModelProperty(value = "不符合项描述")
    private String describe;
    private String notTrueDescribe;
    @ApiModelProperty(value = "所属工作产品/过程")
    private String workProcess;
modules/mainPart/src/main/java/com/zt/life/modules/qaAuditReport/service/QaAuditReportService.java
@@ -81,7 +81,7 @@
    public List<QaAuditReport> page(QueryFilter queryFilter) {
        List<QaAuditReport> list = baseDao.getList(queryFilter.getQueryParams());
        if (list != null && list.size() > 0) {
            workflowService.getRunFlow(list, "pzbgsh");
            workflowService.getRunFlow(list, "qashbg");
            sysOssService.setListOsses(list, "qa_audit_report");
        }
        return list;
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/controller/RiskMeasureController.java
New file
@@ -0,0 +1,95 @@
package com.zt.life.modules.riskTraceRecord.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.riskTraceRecord.model.RiskMeasure;
import com.zt.life.modules.riskTraceRecord.service.RiskMeasureService;
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;
/**
 * risk_measure
 *
 * @author zt generator
 * @since 1.0.0 2024-01-09
 */
@RestController
@RequestMapping("/riskTraceRecord/RiskMeasure/")
@Api(tags="risk_measure")
public class RiskMeasureController {
    @Autowired
    private RiskMeasureService riskMeasureService;
    @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<RiskMeasure> page(@ApiIgnore @QueryParam QueryFilter queryFilter){
        return PageResult.ok(riskMeasureService.page(queryFilter));
    }
    @GetMapping("{id}")
    @ApiOperation("信息")
    public Result<RiskMeasure> get(@PathVariable("id") Long id){
        RiskMeasure data = riskMeasureService.get(id);
        return Result.ok(data);
    }
    @PostMapping
    @ApiOperation("新增")
    @LogOperation("新增")
    public Result insert(@RequestBody RiskMeasure riskMeasure){
        //效验数据
        ValidatorUtils.validateEntity(riskMeasure, AddGroup.class, DefaultGroup.class);
        riskMeasureService.insert(riskMeasure);
        return Result.ok();
    }
    @PutMapping
    @ApiOperation("修改")
    @LogOperation("修改")
    public Result update(@RequestBody RiskMeasure riskMeasure){
        //效验数据
        ValidatorUtils.validateEntity(riskMeasure, UpdateGroup.class, DefaultGroup.class);
        riskMeasureService.update(riskMeasure);
        return Result.ok();
    }
    @DeleteMapping
    @ApiOperation("删除")
    @LogOperation("删除")
    public Result delete(@RequestBody Long[] ids){
        //效验数据
        AssertUtils.isArrayEmpty(ids, "id");
        riskMeasureService.delete(ids);
        return Result.ok();
    }
}
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/controller/RiskTraceItemController.java
New file
@@ -0,0 +1,111 @@
package com.zt.life.modules.riskTraceRecord.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.dto.QaAuditReportDto;
import com.zt.life.modules.riskTraceRecord.dto.RiskTraceDto;
import com.zt.life.modules.riskTraceRecord.model.RiskTraceItem;
import com.zt.life.modules.riskTraceRecord.service.RiskTraceItemService;
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.HttpServletResponse;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * risk_trace_item
 *
 * @author zt generator
 * @since 1.0.0 2024-01-09
 */
@RestController
@RequestMapping("/riskTraceRecord/RiskTraceItem/")
@Api(tags = "risk_trace_item")
public class RiskTraceItemController {
    @Autowired
    private RiskTraceItemService riskTraceItemService;
    @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 = "riskDesc", value = "风险描述", dataType = Constant.QT.STRING, format = "risk_desc^LK")})
    public PageResult<RiskTraceItem> page(@ApiIgnore @QueryParam QueryFilter queryFilter) {
        return PageResult.ok(riskTraceItemService.page(queryFilter));
    }
    @GetMapping("getDto")
    @ApiOperation("信息")
    public Result<RiskTraceDto> getDto(Long projectId, Long riskId) {
        RiskTraceDto data = riskTraceItemService.getDto(projectId, riskId);
        if (riskId != null) {
            OssDto ossDto = sysOssConfigService.getOssByBusiType(riskId, "risk_trace_item");
            if (ossDto != null) {
                data.setFiles(ossDto);
            }
        }
        return Result.ok(data);
    }
    @PostMapping
    @ApiOperation("新增")
    @LogOperation("新增")
    public Result insert(@RequestBody RiskTraceDto riskTraceDto) {
        //效验数据
        ValidatorUtils.validateEntity(riskTraceDto, AddGroup.class, DefaultGroup.class);
        Boolean result = riskTraceItemService.save(riskTraceDto);
        return Result.ok();
    }
    @PutMapping
    @ApiOperation("修改")
    @LogOperation("修改")
    public Result update(@RequestBody RiskTraceDto riskTraceDto) {
        //效验数据
        ValidatorUtils.validateEntity(riskTraceDto, AddGroup.class, DefaultGroup.class);
        Boolean result = riskTraceItemService.save(riskTraceDto);
        return Result.ok();
    }
    @DeleteMapping("deleteRisk")
    @ApiOperation("删除")
    @LogOperation("删除")
    public Result delete(@RequestBody Long[] ids) {
        //效验数据
        AssertUtils.isArrayEmpty(ids, "id");
        riskTraceItemService.delete(ids);
        return Result.ok();
    }
}
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/controller/RiskTraceRecordController.java
New file
@@ -0,0 +1,96 @@
package com.zt.life.modules.riskTraceRecord.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.riskTraceRecord.model.RiskTraceRecord;
import com.zt.life.modules.riskTraceRecord.service.RiskTraceRecordService;
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;
/**
 * risk_trace_record
 *
 * @author zt generator
 * @since 1.0.0 2024-01-09
 */
@RestController
@RequestMapping("/riskTraceRecord/RiskTraceRecord/")
@Api(tags="risk_trace_record")
public class RiskTraceRecordController {
    @Autowired
    private RiskTraceRecordService riskTraceRecordService;
    @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<RiskTraceRecord> page(@ApiIgnore @QueryParam QueryFilter queryFilter){
        return PageResult.ok(riskTraceRecordService.page(queryFilter));
    }
    @GetMapping("{id}")
    @ApiOperation("信息")
    public Result<RiskTraceRecord> get(@PathVariable("id") Long id){
        RiskTraceRecord data = riskTraceRecordService.get(id);
        return Result.ok(data);
    }
    @PostMapping
    @ApiOperation("新增")
    @LogOperation("新增")
    public Result insert(@RequestBody RiskTraceRecord riskTraceRecord){
        //效验数据
        ValidatorUtils.validateEntity(riskTraceRecord, AddGroup.class, DefaultGroup.class);
        riskTraceRecordService.insert(riskTraceRecord);
        return Result.ok();
    }
    @PutMapping
    @ApiOperation("修改")
    @LogOperation("修改")
    public Result update(@RequestBody RiskTraceRecord riskTraceRecord){
        //效验数据
        ValidatorUtils.validateEntity(riskTraceRecord, UpdateGroup.class, DefaultGroup.class);
        riskTraceRecordService.update(riskTraceRecord);
        return Result.ok();
    }
    @DeleteMapping
    @ApiOperation("删除")
    @LogOperation("删除")
    public Result delete(@RequestBody Long[] ids){
        //效验数据
        AssertUtils.isArrayEmpty(ids, "id");
        riskTraceRecordService.delete(ids);
        return Result.ok();
    }
}
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dao/RiskMeasureDao.java
New file
@@ -0,0 +1,24 @@
package com.zt.life.modules.riskTraceRecord.dao;
import com.zt.common.dao.BaseDao;
import com.zt.life.modules.riskTraceRecord.model.RiskMeasure;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Map;
/**
 * risk_measure
 *
 * @author zt generator
 * @since 1.0.0 2024-01-09
 */
@Mapper
public interface RiskMeasureDao extends BaseDao<RiskMeasure> {
    List<RiskMeasure> getList(Map<String, Object> params);
    RiskMeasure getByRiskId(Map<String, Object> params);
}
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dao/RiskTraceItemDao.java
New file
@@ -0,0 +1,23 @@
package com.zt.life.modules.riskTraceRecord.dao;
import com.zt.common.dao.BaseDao;
import com.zt.life.modules.riskTraceRecord.model.RiskTraceItem;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Map;
/**
 * risk_trace_item
 *
 * @author zt generator
 * @since 1.0.0 2024-01-09
 */
@Mapper
public interface RiskTraceItemDao extends BaseDao<RiskTraceItem> {
    List<RiskTraceItem> getList(Map<String, Object> params);
}
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dao/RiskTraceRecordDao.java
New file
@@ -0,0 +1,23 @@
package com.zt.life.modules.riskTraceRecord.dao;
import com.zt.common.dao.BaseDao;
import com.zt.life.modules.riskTraceRecord.model.RiskTraceRecord;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
import java.util.Map;
/**
 * risk_trace_record
 *
 * @author zt generator
 * @since 1.0.0 2024-01-09
 */
@Mapper
public interface RiskTraceRecordDao extends BaseDao<RiskTraceRecord> {
    List<RiskTraceRecord> getList(Map<String, Object> params);
}
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/dto/RiskTraceDto.java
New file
@@ -0,0 +1,35 @@
package com.zt.life.modules.riskTraceRecord.dto;
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.modules.riskTraceRecord.model.RiskMeasure;
import com.zt.life.modules.riskTraceRecord.model.RiskTraceItem;
import com.zt.life.modules.riskTraceRecord.model.RiskTraceRecord;
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 RiskTraceDto {
    private Long id;
    private Long projectId;
    private Long riskId;
    @ApiModelProperty(value = "风险措施")
    private RiskMeasure riskMeasure;
    @ApiModelProperty(value = "测试项目基本信息")
    private Project project;
    @ApiModelProperty(value = "附件")
    private OssDto files;
    @ApiModelProperty(value = "风险跟踪项")
    private List<RiskTraceItem> itemList = new ArrayList<>();
    @ApiModelProperty(value = "不符合项列表")
    private List<RiskTraceRecord> recordList = new ArrayList<>();
}
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/model/RiskMeasure.java
New file
@@ -0,0 +1,133 @@
package com.zt.life.modules.riskTraceRecord.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;
/**
 * risk_measure
 *
 * @author zt generator
 * @since 1.0.0 2024-01-09
 */
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("risk_measure")
public class RiskMeasure extends BusiEntity {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "需求风险跟踪人员")
    private String requireRiskTrackers;
    @ApiModelProperty(value = "需求风险跟踪日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date requireRiskDate;
    @ApiModelProperty(value = "设计风险跟踪人员")
    private String designRiskTrackers;
    @ApiModelProperty(value = "设计风险跟踪日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date designRiskDate;
    @ApiModelProperty(value = "执行风险跟踪人员")
    private String executeRiskTrackers;
    @ApiModelProperty(value = "执行风险跟踪日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date executeRiskDate;
    @ApiModelProperty(value = "总结风险跟踪人员")
    private String summaryRiskTrackers;
    @ApiModelProperty(value = "总结风险跟踪日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date summaryRiskDate;
    @ApiModelProperty(value = "需求措施")
    private String requireMeasure;
    @ApiModelProperty(value = "设计措施")
    private String designMeasure;
    @ApiModelProperty(value = "执行措施")
    private String executeMeasure;
    @ApiModelProperty(value = "总结措施")
    private String summaryMeasure;
    @ApiModelProperty(value = "需求记录人员")
    private String requireRecorder;
    @ApiModelProperty(value = "需求记录日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date requireRecordDate;
    @ApiModelProperty(value = "设计记录人员")
    private String designRecorder;
    @ApiModelProperty(value = "设计记录时间")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date designRecordDate;
    @ApiModelProperty(value = "执行记录人员")
    private String executeRecorder;
    @ApiModelProperty(value = "执行记录日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date executeRecordDate;
    @ApiModelProperty(value = "总结记录人员")
    private String summaryRecorder;
    @ApiModelProperty(value = "总结记录日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date summaryRecordDate;
    @ApiModelProperty(value = "需求评估")
    private String requireEvaluate;
    @ApiModelProperty(value = "设计评估")
    private String designEvaluate;
    @ApiModelProperty(value = "执行评估")
    private String executeEvaluate;
    @ApiModelProperty(value = "总结评估")
    private String summaryEvaluate;
    @ApiModelProperty(value = "需求部门负责人")
    private String requireLeader;
    @ApiModelProperty(value = "需求部门负责日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date requireLeadDate;
    @ApiModelProperty(value = "设计部门负责人")
    private String designLeader;
    @ApiModelProperty(value = "设计部门负责日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date designLeadDate;
    @ApiModelProperty(value = "执行部门负责人")
    private String executeLeader;
    @ApiModelProperty(value = "执行部门负责日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date executeLeadDate;
    @ApiModelProperty(value = "总结部门负责人")
    private String summaryLeader;
    @ApiModelProperty(value = "总结部门负责日期")
    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date summaryLeadDate;
}
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/model/RiskTraceItem.java
New file
@@ -0,0 +1,39 @@
package com.zt.life.modules.riskTraceRecord.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;
/**
 * risk_trace_item
 *
 * @author zt generator
 * @since 1.0.0 2024-01-09
 */
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("risk_trace_item")
public class RiskTraceItem extends BusiEntity {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "风险ID")
    private Long riskId;
    @ApiModelProperty(value = "排序")
    private Integer sort;
    @ApiModelProperty(value = "风险名称")
    private String riskName;
    @ApiModelProperty(value = "风险描述")
    private String riskDesc;
    @ApiModelProperty(value = "风险等级")
    private String riskLevel;
}
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/model/RiskTraceRecord.java
New file
@@ -0,0 +1,39 @@
package com.zt.life.modules.riskTraceRecord.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;
/**
 * risk_trace_record
 *
 * @author zt generator
 * @since 1.0.0 2024-01-09
 */
@Data
@EqualsAndHashCode(callSuper=false)
@TableName("risk_trace_record")
public class RiskTraceRecord extends BusiEntity {
    private static final long serialVersionUID = 1L;
    @ApiModelProperty(value = "风险ID")
    private Long riskId;
    @ApiModelProperty(value = "测试需求")
    private String testRequire;
    @ApiModelProperty(value = "测试设计")
    private String testDesign;
    @ApiModelProperty(value = "测试执行")
    private String testExecute;
    @ApiModelProperty(value = "测试总结")
    private String testSummary;
}
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/service/RiskMeasureService.java
New file
@@ -0,0 +1,41 @@
package com.zt.life.modules.riskTraceRecord.service;
import com.zt.common.service.BaseService;
import com.zt.life.modules.riskTraceRecord.dao.RiskMeasureDao;
import com.zt.life.modules.riskTraceRecord.model.RiskMeasure;
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;
/**
 * risk_measure
 *
 * @author zt generator
 * @since 1.0.0 2024-01-09
 */
@Service
public class RiskMeasureService  extends BaseService<RiskMeasureDao, RiskMeasure> {
    /**
     * 分页查询
     *
     * @param queryFilter
     * @return
     */
    public List<RiskMeasure> page(QueryFilter queryFilter) {
        return baseDao.getList(queryFilter.getQueryParams());
    }
    /**
     * 删除
     *
     * @param ids
     */
    public void delete(Long[] ids) {
        super.deleteLogic(ids);
    }
}
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/service/RiskTraceItemService.java
New file
@@ -0,0 +1,129 @@
package com.zt.life.modules.riskTraceRecord.service;
import com.zt.common.service.BaseService;
import com.zt.common.utils.CommonUtils;
import com.zt.life.modules.project.service.ProjectService;
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.modules.riskTraceRecord.dao.RiskTraceItemDao;
import com.zt.life.modules.riskTraceRecord.dto.RiskTraceDto;
import com.zt.life.modules.riskTraceRecord.model.RiskMeasure;
import com.zt.life.modules.riskTraceRecord.model.RiskTraceItem;
import com.zt.life.modules.riskTraceRecord.model.RiskTraceRecord;
import com.zt.life.sys.service.SysOssConfigService;
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 java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * risk_trace_item
 *
 * @author zt generator
 * @since 1.0.0 2024-01-09
 */
@Service
public class RiskTraceItemService  extends BaseService<RiskTraceItemDao, RiskTraceItem> {
    @Autowired
    private RiskMeasureService measureService;
    @Autowired
    private RiskTraceRecordService recordService;
    @Autowired
    private ProjectService projectService;
    /**
     * 分页查询
     *
     * @param queryFilter
     * @return
     */
    public List<RiskTraceItem> page(QueryFilter queryFilter) {
        return baseDao.getList(queryFilter.getQueryParams());
    }
    private List<RiskTraceItem> getList(Long riskId) {
        Map<String, Object> params = new HashMap<>();
        params.put("riskId",riskId);
        return baseDao.getList(params);
    }
    /**
     * 删除
     *
     * @param ids
     */
    public void delete(Long[] ids) {
        super.deleteLogic(ids);
    }
    public RiskTraceDto getDto(Long projectId, Long riskId){
        RiskTraceDto data = new RiskTraceDto();
        if (riskId != null) {
            data.setId(riskId);
            RiskMeasure riskMeasure = measureService.get(riskId);
            data.setRiskMeasure(riskMeasure);
            if (riskMeasure != null && projectId == null) {
                projectId = data.getProjectId();
            }
            List<RiskTraceItem> itemList = this.getList(riskId);
            data.setItemList(itemList);
            List<RiskTraceRecord> recordList = recordService.getList(riskId);
            data.setRecordList(recordList);
        } else {
            RiskMeasure riskMeasure = new RiskMeasure();
            data.setRiskMeasure(riskMeasure);
            List<RiskTraceItem> itemList = this.getList(null);
            data.setItemList(itemList);
            List<RiskTraceRecord> recordList = new ArrayList<>();
            data.setRecordList(recordList);
        }
        if (projectId != null) {
            data.setProjectId(projectId);
            data.setProject(projectService.get(projectId));
        }
        return data;
    }
    public Boolean save(RiskTraceDto riskTraceDto) {
        Long riskId = riskTraceDto.getRiskMeasure().getId();
        if (riskId != null)
            measureService.update(riskTraceDto.getRiskMeasure());
        else {
            measureService.insert(riskTraceDto.getRiskMeasure());
            riskId = riskTraceDto.getRiskMeasure().getId();
        }
        for (RiskTraceRecord record : riskTraceDto.getRecordList()) {
            record.setRiskId(riskId);
            if (record.getId() != null) {
                RiskTraceRecord record2 = recordService.get(record.getId());
                if (CommonUtils.isActureChangeData(record,record2)) {
                    recordService.update(record2);
                }
            } else {
                recordService.insert(record);
            }
        }
        for (RiskTraceItem item : riskTraceDto.getItemList()) {
            item.setRiskId(riskId);
            if (item.getId() != null) {
                RiskTraceItem item2 = this.get(item.getId());
                if (CommonUtils.isActureChangeData(item,item2)) {
                    baseDao.updateById(item2);
                }
            } else {
                baseDao.insert(item);
            }
        }
        return true;
    }
}
modules/mainPart/src/main/java/com/zt/life/modules/riskTraceRecord/service/RiskTraceRecordService.java
New file
@@ -0,0 +1,47 @@
package com.zt.life.modules.riskTraceRecord.service;
import com.zt.common.service.BaseService;
import com.zt.life.modules.riskTraceRecord.dao.RiskTraceRecordDao;
import com.zt.life.modules.riskTraceRecord.model.RiskTraceRecord;
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;
/**
 * risk_trace_record
 *
 * @author zt generator
 * @since 1.0.0 2024-01-09
 */
@Service
public class RiskTraceRecordService  extends BaseService<RiskTraceRecordDao, RiskTraceRecord> {
    /**
     * 分页查询
     *
     * @param queryFilter
     * @return
     */
    public List<RiskTraceRecord> page(QueryFilter queryFilter) {
        return baseDao.getList(queryFilter.getQueryParams());
    }
    /**
     * 删除
     *
     * @param ids
     */
    public void delete(Long[] ids) {
        super.deleteLogic(ids);
    }
    public List<RiskTraceRecord> getList(Long riskId) {
        Map<String, Object> params = new HashMap<>();
        params.put("riskId",riskId);
        return baseDao.getList(params);
    }
}
modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportDao.xml
@@ -4,10 +4,11 @@
<mapper namespace="com.zt.life.modules.qaAuditReport.dao.QaAuditReportDao">
    <select id="getList" resultType="com.zt.life.modules.qaAuditReport.model.QaAuditReport">
        select a.*
        select a.*,p.software_name,p.software_identity
        from qa_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>
modules/mainPart/src/main/resources/mapper/qaAuditReport/QaAuditReportIncongruentDao.xml
@@ -17,7 +17,8 @@
        </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,
        SET @row_number = 0;
        select (@row_number := @row_number + 1) AS no,b.code as oddNum,a.check_content as notTrueDescribe,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
@@ -26,7 +27,7 @@
        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 ('','','','')
          and b.page_code in ('contract','require','execute','summary')
        order by code,no
    </select>
modules/mainPart/src/main/resources/mapper/riskTraceRecord/RiskMeasureDao.xml
New file
@@ -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.riskTraceRecord.dao.RiskMeasureDao">
    <select id="getList" resultType="com.zt.life.modules.riskTraceRecord.model.RiskMeasure">
        select a.*
        from risk_measure a
        <where>
            a.is_delete = 0
            <if test="whereSql!=null">
                and ${whereSql}
            </if>
        </where>
        <if test="orderBySql!=null">
            ORDER BY ${orderBySql}
        </if>
    </select>
    <select id="getByRiskId" resultType="com.zt.life.modules.riskTraceRecord.model.RiskMeasure">
        select a.*
        from risk_measure a
        <where>
            a.is_delete = 0
            <if test="riskId!=null">
                and a.risk_id = ${riskId}
            </if>
        </where>
        <if test="orderBySql!=null">
            ORDER BY ${orderBySql}
        </if>
    </select>
</mapper>
modules/mainPart/src/main/resources/mapper/riskTraceRecord/RiskTraceItemDao.xml
New file
@@ -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.riskTraceRecord.dao.RiskTraceItemDao">
    <select id="getList" resultType="com.zt.life.modules.riskTraceRecord.model.RiskTraceItem">
        select a.*
        from risk_trace_item a
        <where>
            a.is_delete = 0
            <if test="riskId!=null">
                and a.id = ${riskId}
            </if>
        </where>
        <if test="orderBySql!=null">
            ORDER BY ${orderBySql}
        </if>
    </select>
</mapper>
modules/mainPart/src/main/resources/mapper/riskTraceRecord/RiskTraceRecordDao.xml
New file
@@ -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.riskTraceRecord.dao.RiskTraceRecordDao">
    <select id="getList" resultType="com.zt.life.modules.riskTraceRecord.model.RiskTraceRecord">
        select a.*
        from risk_trace_record a
        <where>
            a.is_delete = 0
            <if test="riskId!=null">
                and a.risk_id = ${riskId}
            </if>
        </where>
        <if test="orderBySql!=null">
            ORDER BY ${orderBySql}
        </if>
    </select>
</mapper>
web/packages/components/zt-dialog/src/zt-dialog.vue
@@ -25,7 +25,7 @@
          <el-button type="warning" @click="formSubmit('zc')">暂存</el-button>
          <el-button type="warning" @click="formSubmit('bl')">办理</el-button>
        </template>
        <el-button v-else-if="editAble && hasConfirm" type="primary" @click="formSubmit('qd')" v-preventReClick>{{
        <el-button v-else-if="hasConfirm" type="primary" @click="formSubmit('qd')" v-preventReClick>{{
          $t('confirm') }}
        </el-button>
        <el-button v-else-if="editAble" type="warning" @click="formSubmit('bc')">保存
web/packages/components/zt-select/src/zt-select.vue
@@ -55,7 +55,6 @@
    mounted() {
      // console.log(this.datas, 'this.datas in zt-select')
      if (this.datas !== undefined && this.datas.length > 0) {
        // console.log('use datas')
        this.setDataList(this.datas)
      } else if (this.url !== undefined) { // 指定了url
        // console.log('use url')
@@ -81,6 +80,7 @@
      setDataList(data) { // 设置树的值
        if (Array.isArray(data)) {
          this.dataList = data
          console.log(this.dataList,"setDataList")
        } else {
          this.dataList = data.rows
        }
web/packages/components/zt-tree-dialog-selector/src/zt-tree-dialog-selector.vue
@@ -1,7 +1,7 @@
<template>
  <div>
    <el-input v-model="text" @click.native="open()" suffix-icon="el-icon-arrow-down" slot="reference" :placeholder="placeholder"/>
    <zt-dialog ref="dialog" :append-to-body="true" :title="title" @confirm="confirm">
    <zt-dialog ref="dialog" :append-to-body="true" :title="title" :hasConfirm="true" @confirm="confirm">
      <el-row>
        <el-col class="tree" :span="14">
          <el-container>
web/packages/views/modules/sys/dict-type.vue
@@ -102,7 +102,7 @@
        token: Cookies.get('token'),
        progressId:this.progress.id
      })
      this.apiURL = `http://localhost:8058/maintain/lifeManagement/importDataDictExcel?${params}`
      this.apiURL = `http://localhost:8050/maintain/lifeManagement/importDataDictExcel?${params}`
    },
    DictImport() {
      this.$refs.dictListImport.$refs.dialog.init()
web/packages/views/modules/sys/role-user-deit.vue
@@ -1,7 +1,7 @@
<template>
  <zt-dialog ref="dialog" @confirm="formSubmit"  append-to-body>
    <el-form :model="dataForm" ref="dataForm" :disabled="dataForm.disabled" label-width="120px">
        <zt-form-item label="选择用户" prop="menuIdList" rules="required">
        <zt-form-item label="选择用户" prop="menuIdList">
            <zt-user-selector v-model="dataForm.menuIdList" multiple/>
        </zt-form-item>
    </el-form>
web/packages/views/modules/sys/role-user.vue
@@ -57,7 +57,7 @@
        if (res.success) {
          await this.$tip.success()
          this.$refs.examineObj.query()
          this.$emit('refresh')
          this.$refs.dialog.close()
        }
      }
    },
web/packages/views/modules/sys/role.vue
@@ -17,7 +17,8 @@
                  </el-form-item>
                  <el-form-item class="message-btn">
                    <zt-button type="query" @click="table.query()"/>
                    <zt-button v-show="selectCompanyFlag" perm="sys:role" type="add" @click="table.editHandle()"/>
                    <!--v-show="selectCompanyFlag"-->
                    <zt-button perm="sys:role" type="add" @click="table.editHandle()"/>
                    <zt-button perm="sys:role:delete" type="delete" @click="table.deleteHandle()"/>
                  </el-form-item>
                </el-form>
web/public/index.html
@@ -219,8 +219,8 @@
    window.SITE_CONFIG['dynamicMenuRoutesHasAdded'] = false; // 动态(菜单)路由是否已经添加的状态标示(用于判断是否需要重新拉取数据并进行动态添加操作)
    // 服务地址
    window.SITE_CONFIG['apiURL'] = 'http://' + location.hostname + ':8058/life-protection';
    window.SITE_CONFIG['apiURL2'] = 'http://' + location.hostname + ':8058/life-protection';
    window.SITE_CONFIG['apiURL'] = 'http://' + location.hostname + ':8050/life-protection';
    window.SITE_CONFIG['apiURL2'] = 'http://' + location.hostname + ':8050/life-protection';
    //window.SITE_CONFIG['apiURL2'] = 'http://'+location.hostname+':8066';
    //window.SITE_CONFIG['apiURL'] = '<%= process.env.VUE_APP_API_URL %>';
web/src/views/modules/configItemWarehouse/ConfigItemWarehouse-AddOrUpdate.vue
@@ -300,10 +300,10 @@
    },
    created() {
      const roleName = localStorage.getItem('roleName')
      if (roleName && roleName.includes('QA')) {
      if (roleName && roleName.includes('审核人员')) {
        this.showColumn = true;
      }
      if (roleName && roleName.includes('测试员')) {
      if (roleName && roleName.includes('检测人员')) {
        this.showAddAndEdit = true;
      }
    },
web/src/views/modules/itemCirculatOrder/ItemCirculatOrder-AddOrUpdate.vue
@@ -135,13 +135,13 @@
            </el-form-item>
          </div>
        </div>
        <!--<div class="el-flexCirculationDialog el-border-bottom">
        <div class="el-flexCirculationDialog el-border-bottom">
          <div style="width: 112px;text-align: center;font-weight: 600">
            校准/检测接收人
            检测接收人
          </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.itemAccept}}
              {{dataForm.circulatOrder.detectAcceptor}}
            </el-form-item>
          </div>
          <div style="width: 52px;text-align: center;font-weight: 600">
@@ -149,7 +149,7 @@
          </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.acceptDate}}
              {{dataForm.circulatOrder.detectAcceptDate| filterTime('YYYY年MM月DD日')}}
            </el-form-item>
          </div>
          <div style="width: 84px;text-align: center;font-weight: 600">
@@ -157,13 +157,13 @@
          </div>
          <div class="el-border-left " style="width: 35%;height: 40px;">
            <el-form-item label="是否满足测试要求" label-width="150px" style="padding-left:20px;margin-bottom:0">
              <zt-dict v-model="dataForm.circulatOrder.cscs" :radio="true" dict="is_or_not"></zt-dict>
              <zt-dict :disabled="stepMarker!=='wplz_jcjs'" v-model="dataForm.circulatOrder.detectAcceptSituation" :radio="true" dict="is_or_not"></zt-dict>
            </el-form-item>
          </div>
        </div>-->
        </div>
        <div class="el-flexCirculationDialog el-border-bottom">
          <div style="width: 112px;text-align: center;font-weight: 600">
            校准检测人
            检测人
          </div>
          <div class="el-border-left-right" style="width: 20%;height: 40px;">
            <el-form-item style="width: 100%;padding-left:20px;margin:0;">
@@ -188,13 +188,13 @@
            </el-form-item>
          </div>
        </div>
       <!-- <div class="el-flexCirculationDialog el-border-bottom">
        <div class="el-flexCirculationDialog el-border-bottom">
          <div style="width: 112px;text-align: center;font-weight: 600">
            物品入库人
          </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.warehouse}}
              {{dataForm.circulatOrder.depositor}}
            </el-form-item>
          </div>
          <div style="width: 52px;text-align: center;font-weight: 600">
@@ -202,18 +202,18 @@
          </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.warehouseDate}}
              {{dataForm.circulatOrder.depositDate| filterTime('YYYY年MM月DD日')}}
            </el-form-item>
          </div>
          <div style="width: 84px;text-align: center;font-weight: 600">
            情况说明
          </div>
          <div class="el-border-left " style="width: 35%;height: 40px;">
            <el-form-item label="是否满足测试要求" label-width="150px" style="padding-left:20px;margin-bottom:0">
              <zt-dict v-model="dataForm.circulatOrder.warehouseSituation" :radio="true" dict="is_or_not"></zt-dict>
            <el-form-item label="是否已入样品库" label-width="150px" style="padding-left:20px;margin-bottom:0">
              <zt-dict :disabled="stepMarker!=='wplz_wprk'" v-model="dataForm.circulatOrder.depositSituation" :radio="true" dict="is_or_not"></zt-dict>
            </el-form-item>
          </div>
        </div>-->
        </div>
        <div class="el-flexCirculationDialog el-border-bottom">
          <div style="width: 112px;text-align: center;font-weight: 600">
            物品发放人
@@ -228,7 +228,6 @@
          </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.issueDate}}-->
              {{ dataForm.circulatOrder.issueDate | filterTime('YYYY年MM月DD日') }}
            </el-form-item>
          </div>
@@ -277,12 +276,15 @@
            itemOther: '',
            acceptSituation: '',
            acceptDate: '',
            detectAcceptor:'',
            detectAcceptDate:'',
            detectAcceptSituation:'',
            calibratDetector: '',
            detectDate: '',
            detectSituation: '',
            warehouse: '',
            warehouseDate: '',
            warehouseSituation: '',
            depositor: '',
            depositDate: '',
            depositSituation: '',
            itemIssuer: '',
            issueDate: '',
            issueSituation: '',
web/src/views/modules/project/Project-AddOrUpdate.vue
@@ -1,7 +1,8 @@
<template>
  <zt-dialog ref="dialog" column="2" @confirm="formSubmit">
<!--    <div class="fa-card-a fa-box-a" style="height: calc(100vh - 130px)">-->
      <el-form ref="dataForm" style="padding: 0" :inline="true" :disabled="dataForm.disabled" :model="dataForm" label-width="120px"
    <el-form ref="dataForm" style="padding: 0" :inline="true" :disabled="dataForm.disabled" :model="dataForm"
             label-width="120px"
               class="projectAuto">
        <div class="DManageForm">
          <el-form-item label-width="80px" label="项目编号" prop="code" style="width: 99%;margin-bottom:-5px" readonly>
@@ -15,11 +16,13 @@
            </div>
            <div class="DSTOld-1-Form">
              <!-- 单位名称 -->
              <zt-form-item class="marginTopAndMarginBottom" label="单位名称" prop="entrustUnitName" style="width: 49%" rules="required">
            <zt-form-item class="marginTopAndMarginBottom" label="单位名称" prop="entrustUnitName" style="width: 49%"
                          rules="required">
                <el-input v-model="dataForm.entrustUnitName" placeholder="请输入单位名称"></el-input>
              </zt-form-item>
              <!-- 联系人 -->
              <zt-form-item class="marginTopAndMarginBottom" label="联系人" prop="entrustUnitContact" style="width: 49%" rules="required">
            <zt-form-item class="marginTopAndMarginBottom" label="联系人" prop="entrustUnitContact" style="width: 49%"
                          rules="required">
                <el-input v-model="dataForm.entrustUnitContact" placeholder="请输入联系人"></el-input>
              </zt-form-item>
@@ -39,11 +42,13 @@
            </div>
            <div class="DSTOld-1-Form">
              <!-- 单位名称 -->
              <zt-form-item class="marginTopAndMarginBottom" label="单位名称" prop="developUnitName" style="width: 49%" rules="required">
            <zt-form-item class="marginTopAndMarginBottom" label="单位名称" prop="developUnitName" style="width: 49%"
                          rules="required">
                <el-input v-model="dataForm.developUnitName" placeholder="请输入单位名称"></el-input>
              </zt-form-item>
              <!-- 联系人 -->
              <zt-form-item class="marginTopAndMarginBottom" label="联系人" prop="developUnitContact" style="width: 49%" rules="required">
            <zt-form-item class="marginTopAndMarginBottom" label="联系人" prop="developUnitContact" style="width: 49%"
                          rules="required">
                <el-input v-model="dataForm.developUnitContact" placeholder="请输入联系人"></el-input>
              </zt-form-item>
              <!-- 详细地址 -->
@@ -62,11 +67,13 @@
            </div>
            <div class="DSTOld-1-Form">
              <!-- 单位名称 -->
              <zt-form-item class="marginTopAndMarginBottom" label="软件名称" prop="softwareName" style="width: 49%" rules="required">
            <zt-form-item class="marginTopAndMarginBottom" label="软件名称" prop="softwareName" style="width: 49%"
                          rules="required">
                <el-input v-model="dataForm.softwareName" placeholder="请输入软件名称"></el-input>
              </zt-form-item>
              <!-- 联系人 -->
              <zt-form-item class="marginTopAndMarginBottom" label="软件标识" prop="softwareIdentity" style="width: 49%" rules="required">
            <zt-form-item class="marginTopAndMarginBottom" label="软件标识" prop="softwareIdentity" style="width: 49%"
                          rules="required">
                <el-input v-model="dataForm.softwareIdentity" placeholder="请输入软件标识"></el-input>
              </zt-form-item>
              <!-- 详细地址 -->
@@ -95,31 +102,36 @@
              项目责任人
            </div>
            <div class="DSTOld-1-Form">
              <!-- 项目负责人 -->
              <zt-form-item class="marginTopAndMarginBottom" label-width="120px" label="项目负责人" prop="projectLeader" style="width: 48%" rules="required">
                <zt-select v-model="dataForm.projectLeader" url="/sys/userEx/getUsersList" placeholder="项目负责人"/>
<!--                <el-input v-model="dataForm.projectLeader" placeholder="请输入项目负责人"></el-input>-->
<!--                <el-select  v-model="dataForm.projectLeader"   placeholder="项目负责人" style="width: 100%">-->
<!--                  <el-option v-for="data in dataList"></el-option>-->
<!--                </el-select>-->
<!--                <el-select v-model="dataForm.projectLeader" clearable placeholder="项目负责人">-->
<!--                  <el-option v-for="item in dataList" :key="item.value" :label="item.label"-->
<!--                             :value="item.value"/>-->
<!--                </el-select>-->
              </zt-form-item>
              <!-- 项目测试人员 -->
              <zt-form-item class="marginTopAndMarginBottom" label-width="120px" label="项目测试人员" prop="projectTesters" style="width: 48%" rules="required">
<!--                <el-input v-model="dataForm.projectTesters" placeholder="请输入项目测试人员"></el-input>-->
                <zt-select v-model="dataForm.projectTesters" url="/sys/userEx/getUsersList" :multiple="true" :clearable="true" placeholder="项目测试人员"/>
              </zt-form-item>
              <!-- 项目审核人 -->
              <zt-form-item label-width="120px" label="项目审核人" prop="projectReviewer" style="width: 48%" rules="required">
<!--                <el-input v-model="dataForm.projectReviewer" placeholder="请输入项目审核人"></el-input>-->
                <zt-select v-model="dataForm.projectReviewer" url="/sys/userEx/getUsersList" :multiple="true" :clearable="true" placeholder="项目审核人"/>
            <zt-form-item class="marginTopAndMarginBottom" label-width="120px" label="所属部门" prop="bizDeptId"
                          style="width: 48%">
              <zt-select v-model="dataForm.bizDeptId" :datas="bizDeptList" onchange="getUserList()" placeholder="所属部门"/>
              </zt-form-item>
              <!-- 是否签署合同 -->
              <zt-form-item label-width="120px" label="是否签署合同" prop="isContract" style="width: 48%" rules="required">
            <zt-form-item label-width="120px" label="是否签署合同" prop="isContract" style="width: 48%">
                <zt-dict v-model="dataForm.isContract" dict="is_or_not"></zt-dict>
            </zt-form-item>
            <!-- 项目负责人 -->
            <zt-form-item class="marginTopAndMarginBottom" label-width="120px" label="项目负责人" prop="projectLeader"
                          style="width: 48%">
              <zt-select v-model="dataForm.projectLeader" :datas="projectLeaderList" placeholder="项目负责人"/>
            </zt-form-item>
            <!-- 项目测试人员 -->
            <zt-form-item class="marginTopAndMarginBottom" label-width="120px" label="项目测试人员" prop="projectTesters"
                          style="width: 48%">
              <!--                <el-input v-model="dataForm.projectTesters" placeholder="请输入项目测试人员"></el-input>-->
              <zt-select v-model="dataForm.projectTesters" :datas="projectTestersList" :multiple="true"
                         :clearable="true" placeholder="项目测试人员"/>
            </zt-form-item>
            <!-- 项目审核人 -->
            <zt-form-item label-width="120px" label="项目审核人" prop="projectReviewer" style="width: 48%">
              <!--                <el-input v-model="dataForm.projectReviewer" placeholder="请输入项目审核人"></el-input>-->
              <zt-select v-model="dataForm.projectReviewer" :datas="projectReviewerList" :multiple="true"
                         :clearable="true" placeholder="项目审核人"/>
            </zt-form-item>
            <zt-form-item label-width="120px" label="项目配置人" prop="projectConfiger" style="width: 48%">
              <!--                <el-input v-model="dataForm.projectReviewer" placeholder="请输入项目审核人"></el-input>-->
              <zt-select v-model="dataForm.projectConfiger" :datas="projectConfigerList" :multiple="true"
                         :clearable="true" placeholder="项目配置人"/>
              </zt-form-item>
            </div>
          </div>
@@ -152,53 +164,92 @@
          projectLeader: '',
          projectTesters: '',
          projectReviewer: '',
          projectConfiger: '',
          bizDeptId: '',
          isContract: '',
        }
        },
        projectLeaderList: [],
        projectTestersList: [],
        projectReviewerList: [],
        projectConfigerList: [],
        bizDeptList: [],
        bizDeptIdList: [],
      }
    },
    watch: {
      /*      bizDeptId(val, oldval) {
              alert(1)
              this.getUserList()
            },*/
    },
    methods: {
      init() {
        this.getInfo()
        this.getbizDept()
      },
      // 获取信息
      async getInfo() {
        let res = await this.$http.get(`/project/Project//${this.dataForm.id}`)
        console.log(this.dataForm.id, "async getInfo()")
        if (this.dataForm.id == undefined) {
          return
        }
        let res = await this.$http.get(`/project/Project/${this.dataForm.id}`)
        if (res.success) {
          this.dataForm = {
            ...this.dataForm,
            ...res.data
          }
          await this.getUserList()
        }
        if(this.dataForm && this.dataForm.projectTesters){
            this.dataForm.projectTesters=this.dataForm.projectTesters.split(',')
            console.log(this.dataForm.projectTesters)
          }
          if(this.dataForm && this.dataForm.projectReviewer){
            this.dataForm.projectReviewer=this.dataForm.projectReviewer.split(',')
            console.log(this.dataForm.projectReviewer)
      },
      async getUserList() {
        let res = await this.$http.get(`/project/Project/getUsersLists?deptId=${this.dataForm.bizDeptId}`)
        if (res.success) {
          this.projectLeaderList = res.data.zrr
          this.projectTestersList = res.data.csry
          this.projectReviewerList = res.data.shry
          this.projectConfigerList = res.data.pzry
          }
        console.log(this.dataForm,'this.dataForm')
      },
      async getbizDept() {
        let res = await this.$http.get(`/sys/dept/getList`)
        if (res.success) {
          this.bizDeptList = res.data;
        }
        console.log(this.bizDeptList, "getbizDept")
      },
      // 表单提交
      async formSubmit() {
        if(this.dataForm && this.dataForm.projectTesters){
        if (this.dataForm && this.dataForm.projectTesters instanceof Array) {
          this.dataForm.projectTesters=this.dataForm.projectTesters.join(',')
          console.log(this.dataForm.projectTesters)
        }
        if(this.dataForm && this.dataForm.projectReviewer){
        if (this.dataForm && this.dataForm.projectReviewer instanceof Array) {
          this.dataForm.projectReviewer=this.dataForm.projectReviewer.join(',')
          console.log(this.dataForm.projectReviewer)
        }
        let res = await this.$http[!this.dataForm.id ? 'post' : 'put']('/project/Project//', this.dataForm)
        if (this.dataForm && this.dataForm.projectConfiger instanceof Array) {
          this.dataForm.projectConfiger = this.dataForm.projectConfiger.join(',')
          console.log(this.dataForm.projectConfiger)
        }
        let res = await this.$http[!this.dataForm.id ? 'post' : 'put']('/project/Project/', this.dataForm)
        if (res.success) {
          await this.$tip.success()
          this.$refs.dialog.close()
          this.$emit('refreshDataList')
        }else {
          if(this.dataForm && this.dataForm.projectTesters){
          if (this.dataForm && this.dataForm.projectTesters instanceof Array) {
            this.dataForm.projectTesters=this.dataForm.projectTesters.split(',')
            console.log(this.dataForm.projectTesters)
          }
          if(this.dataForm && this.dataForm.projectReviewer){
          if (this.dataForm && this.dataForm.projectReviewer instanceof Array) {
            this.dataForm.projectReviewer=this.dataForm.projectReviewer.split(',')
            console.log(this.dataForm.projectReviewer)
          }
          if (this.dataForm && this.dataForm.projectConfiger instanceof Array) {
            this.dataForm.projectConfiger = this.dataForm.projectConfiger.split(',')
            console.log(this.dataForm.projectConfiger)
          }
        }
      }
@@ -232,16 +283,20 @@
  border-left: 1px solid rgba(0,0,0,.2);
  width: 100%;
}
.el-border-left{
  border-left: 1px solid rgba(0,0,0,.2);
}
.DOldForm {
  width: 100%;
}
.el-border-top-and-bottom{
  border-top: 1px solid rgba(0,0,0,.2);
  border-bottom: 1px solid rgba(0,0,0,.2);
}
.DSTOld-1-Form {
  border-left: 1px solid rgba(0,0,0,.2);
  width: 100%;
@@ -250,9 +305,11 @@
.DSTOld-1-Form > .el-form-item>.el-form-item__content {
  width: calc(100% - 120px);
}
.DManageForm > .el-form-item>.el-form-item__content {
  width: calc(100% - 120px);
}
.el-border-bottom {
  border-bottom: 1px solid rgba(0,0,0,.2);
}
@@ -264,12 +321,15 @@
.zt .el-table.el-software th > .cell {
  font-weight: 500;
}
.DHold{
  font-weight: 600;
}
.zt .el-table.el-software{
  font-size: 14px;
}
.projectAuto .marginTopAndMarginBottom {
  margin-top: 10px !important;
  margin-bottom: 0 !important;
web/src/views/modules/project/Project.vue
@@ -28,7 +28,8 @@
            <zt-button type="delete" perm="project: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 v-loading="table.dataLoading" :data="table.dataList" height="100px" v-adaptive="{bottomOffset:70}"
                border @selection-change="table.selectionChangeHandle">
          <el-table-column type="selection" align="center" width="40"/>
          <el-table-column prop="softwareName" label="软件名称"/>
          <el-table-column prop="code" label="项目编号"/>
@@ -51,6 +52,7 @@
<script>
import AddOrUpdate from './Project-AddOrUpdate'
export default {
  data() {
    return {
web/src/views/modules/project/SoftwareTestOrder-AddOrUpdate.vue
@@ -107,6 +107,10 @@
                      </el-table-column>
                    </el-table>
                  </div>
                  <div v-if="!dataForm.disabled" class="icon-container" @click="addMeasuredRow()">
                    <!-- 放置固定的图标 -->
                    <i class="el-icon-plus"></i>
                  </div>
                </div>
                <div class="el-flex" style="height: 40px;">
                  <div class="DWidth DAlign DHold">
@@ -325,6 +329,10 @@
                      <el-table-column prop="name" min-width="300" label="名称"></el-table-column>
                      <el-table-column prop="identify" align="center" width="380" label="标识/版本"></el-table-column>
                    </el-table>
                    <div v-if="!dataForm.disabled" class="icon-container" @click="addDeliverableRow()">
                      <!-- 放置固定的图标 -->
                      <i class="el-icon-plus"></i>
                    </div>
                  </div>
                </div>
              </div>
@@ -567,6 +575,20 @@
      // console.log(this.dataForm, "this.dataForm")
      console.log(this.dataForm,"getInfo this.dataForm")
    },
    addDeliverableRow() {
      this.dataForm.deliverableList.push({})
      this.$nextTick(() => {
        const tableBody = this.$refs.tableDeliverableList.$el.querySelector('.el-table__body-wrapper')
        tableBody.scrollTop = tableBody.scrollHeight
      })
    },
    addMeasuredRow() {
      this.dataForm.measuredList.push({})
      this.$nextTick(() => {
        const tableBody = this.$refs.tableMeasuredList.$el.querySelector('.el-table__body-wrapper')
        tableBody.scrollTop = tableBody.scrollHeight
      })
    },
    async print(){
      var params = qs.stringify({
        token: Cookies.get('token'),
web/src/views/modules/qaAuditReport/QaAuditReport-AddOrUpdate.vue
@@ -10,10 +10,10 @@
      <div style="border: 1px solid rgba(0,0,0,.2);width: 99%">
        <div style="border-bottom: 1px solid rgba(0,0,0,.2);" class="QaAuditContentWidth">
          <el-form-item class="marginTopAndMarginBottom" label="项目名称" style="width: 49%">
            <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: 49%">
            <el-input v-model="dataForm.testAgencyInfo.labContactNum" placeholder="请输入项目标识"></el-input>
            <el-input v-model="dataForm.project.softwareIdentity" placeholder="请输入项目标识"></el-input>
          </el-form-item>
        </div>
        <div class="el-flexQaAuditDialog el-border-bottom">
@@ -22,13 +22,13 @@
          </div>
          <div class="el-border-left" style="width: calc(100% - 120px);min-height: 40px">
            <el-form-item style="width: 50%;padding: 0 5px">
              <span>项目负责人:{{dataForm.contractReview.technicalDirector || '项目负责人'}} </span>
              <span>项目负责人:{{dataForm.project.projectLeader || '项目负责人'}} </span>
            </el-form-item>
            <el-form-item style="width: 40%;padding: 0 5px">
              <span>测试人员:{{dataForm.contractReview.technicalDirector || '测试人员'}} </span>
              <span>测试人员:{{dataForm.project.projectTesters || '测试人员'}} </span>
            </el-form-item>
            <el-form-item style="width: 100%;padding: 0 5px">
              <span>配置管理员:{{dataForm.contractReview.technicalDirector || '配置管理员'}} </span>
            <el-form-item style="width: 40%;padding: 0 5px">
              <span>配置人员:{{dataForm.project.projectConfiger || '配置人员'}} </span>
            </el-form-item>
          </div>
        </div>
@@ -37,6 +37,10 @@
            已完成的检查
          </div>
          <div class="el-border-left" style="width: calc(100% - 120px);min-height: 40px">
            <el-form-item class="el-QaTextarea" label-width="20px" style="width: 100%;padding: 5px">
              <el-input type="textarea" :rows="2" placeholder="请输入内容"
                        v-model="dataForm.auditReport.completedCheck"></el-input>
            </el-form-item>
          </div>
        </div>
        <div class=" el-border-bottom">
@@ -46,22 +50,46 @@
          <div>
            <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"
                        style="width: 99%;margin-left: 5px" border :data="dataForm.incongruentList"
                        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="评审项">
                <el-table-column prop="oddNum" min-width="350" label="不符合项单号">
                  <template v-slot="{ row }">
                    <el-input v-model="row.item" placeholder="评审项"></el-input>
                    <el-input v-model="row.oddNum" placeholder="不符合项单号"></el-input>
                  </template>
                </el-table-column>
                <el-table-column prop="result" width="220" align="center" label="评审结果">
                <el-table-column prop="notTrueDescribe" width="220" align="center" label="不符合项描述">
                  <template v-slot="{ row }">
                    <zt-dict v-model="row.result" placeholder="评审结果" dict="tristate1" :radio="true"
                             clearable></zt-dict>
                    <el-input v-model="row.notTrueDescribe" placeholder="不符合项描述"></el-input>
                  </template>
                </el-table-column>
                <el-table-column prop="workProcess" width="100" align="center" label="所属工作产品/过程">
                  <template v-slot="{ row }">
                    <el-input v-model="row.workProcess" placeholder="所属工作产品/过程"></el-input>
                  </template>
                </el-table-column>
                <el-table-column prop="discoveryPhase" width="80" align="center" label="发现阶段">
                  <template v-slot="{ row }">
                    <el-input v-model="row.discoveryPhase" placeholder="发现阶段"></el-input>
                  </template>
                </el-table-column>
                <el-table-column prop="chargePerson" width="80" align="center" label="责任人">
                  <template v-slot="{ row }">
                    <el-input v-model="row.chargePerson" placeholder="责任人"></el-input>
                  </template>
                </el-table-column>
                <el-table-column prop="status" width="80" align="center" label="状态">
                  <template v-slot="{ row }">
                    <el-input v-model="row.status" placeholder="状态"></el-input>
                  </template>
                </el-table-column>
                <el-table-column prop="remark" width="100" align="center" label="备注">
                  <template v-slot="{ row }">
                    <el-input v-model="row.remark" placeholder="备注"></el-input>
                  </template>
                </el-table-column>
              </el-table>
@@ -74,31 +102,33 @@
          </div>
          <div class="el-border-bottom">
              <el-form-item class="el-QaTextarea" label-width="20px" style="width: 100%;padding: 5px">
                <el-input type="textarea" :rows="2" placeholder="请输入内容"
                          v-model="dataForm.contractReview.reviewRecord"></el-input>
              <el-input v-if="stepMarker=='qashbg_first'" type="textarea" :rows="2" placeholder="请输入内容"
                        v-model="dataForm.auditReport.qaSummary"></el-input>
              <span v-else>{{ dataForm.auditReport.qaSummary}}</span>
              </el-form-item>
              <el-form-item label="检查人(签字):" label-width="160px" style="width: 48%;padding: 5px;">
                <el-input v-model="dataForm.contractReview.technicalDirector"></el-input>
              {{ dataForm.auditReport.checker }}
              </el-form-item>
              <el-form-item  style="width: 48%;padding: 5px;">
                {{ dataForm.contractReview.reviewDate | filterTime('YYYY年MM月DD日') }}
              {{ dataForm.auditReport.checkDate | filterTime('YYYY年MM月DD日') }}
              </el-form-item>
          </div>
          <div>
            <el-form-item label="质量监督员意见:" class="el-QaTextarea1" label-width="160px" style="width: 100%;padding: 5px">
              <el-input type="textarea" :rows="2" placeholder="请输入内容"
                        v-model="dataForm.contractReview.technicalDirector"></el-input>
              <el-input v-if="stepMarker=='qashbg_zljd'" type="textarea" :rows="2" placeholder="请输入内容"
                        v-model="dataForm.auditReport.supervisorOpinion"></el-input>
              <span v-else>{{ dataForm.auditReport.supervisorOpinion}}</span>
            </el-form-item>
            <el-form-item label="质量监督员(签字):" label-width="160px" style="width: 48%;padding: 5px;">
              <el-input v-model="dataForm.contractReview.technicalDirector"></el-input>
              {{ dataForm.auditReport.supervisorSign }}
            </el-form-item>
            <el-form-item  style="width: 48%;padding: 5px;">
              {{ dataForm.contractReview.reviewDate | filterTime('YYYY年MM月DD日') }}
              {{ dataForm.auditReport.superviseDate | filterTime('YYYY年MM月DD日') }}
            </el-form-item>
          </div>
        </div>
      </div>
      <div class="el-flex review-sc" style="height: 60px">
      <div class="el-flex qa-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"/>
@@ -133,49 +163,13 @@
          id: '',
          project: {
            softwareIdentity: '',
            softwarName: '',
            softwareName: '',
            projectLeader: '',
            projectTesters: ''
            projectTesters: '',
            projectConfiger: ''
          },
          contractReview: {
            code: '',
            orderCode: '',
            reviewType: '',
            reviewRecord: '',
            specialRequire: '',
            subcontract: '',
            reviewConclusion: '',
            technicalDirector: '',
            reviewDate: '',
            reviewPanelMember: '',
          },
          incongruentList: [],
          testAgencyInfo: {
            agencyName: '',
            labContactNum: ''
          },
          incongruentList: []
        }
        // dataForm: {
        //   id: '',
        //   files:'',
        //   contractReview: {
        //     code: '',
        //     orderCode: '',
        //     reviewType: '',
        //     reviewRecord: '',
        //     specialRequire: '',
        //     subcontract: '',
        //     reviewConclusion: '',
        //     technicalDirector: '',
        //     reviewDate: '',
        //     reviewPanelMember: '',
        //   },
        //   testAgencyInfo: {
        //     agencyName: '',
        //     labContactNum: ''
        //   },
        //   reviewItemList: []
        // }
      }
    },
    methods: {
@@ -204,7 +198,19 @@
      indexFormat(index) {
        return index += 1
      },
      async getNameById() {
        let params = {
          projectLeaderId: this.dataForm.project.projectLeader,
          projectTestersId: this.dataForm.project.projectTesters,
          projectConfigerId: this.dataForm.project.projectConfiger
        }
        let res = await this.$http.get(`/qaAuditReport/QaAuditReport/getNameById`, {params: params})
        if (res.success) {
          this.dataForm.project.projectLeader = res.data.projectLeaderName
          this.dataForm.project.projectTesters = res.data.projectTestersName
          this.dataForm.project.projectConfiger = res.data.projectConfigerName
        }
      },
      addCirculatRow() {
        this.dataForm.technicalList.push({})
        this.$nextTick(() => {
@@ -223,6 +229,7 @@
          ...this.dataForm,
          ...res.data
        }
        this.getNameById()
        if (this.dataForm.project === null) {
          this.dataForm.project = {}
        }
@@ -265,16 +272,25 @@
  display: flex;
  align-items: center;
}
.QaFormWidth{
  width: 120px;
}
.QaAuditContentWidth > .el-form-item > .el-form-item__content {
  width: calc(100% - 120px);
}
.el-form-item.el-QaTextarea > .el-form-item__content {
  width: 100%;
}
.el-form-item.el-QaTextarea1 > .el-form-item__content {
  width: calc(100% - 160px);
}
</style>
<style>
  .qa-sc > .el-form-item > .el-form-item__content {
    width: 100%;
  }
</style>
web/src/views/modules/qaAuditReport/QaAuditReport.vue
@@ -14,8 +14,8 @@
          </el-form-item>
          <el-form-item>
            <zt-button type="query" @click="table.query()"/>
            <zt-button type="primary" class="el-icon-edit"  @click="add()">新增</zt-button>
            <zt-button type="delete"  @click="table.deleteHandle()"/>
            <zt-button type="primary" class="el-icon-edit" perm="qaAuditReport: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">
web/src/views/modules/riskTraceRecord/RiskTraceItem-AddOrUpdate.vue
New file
@@ -0,0 +1,69 @@
<template>
  <zt-dialog ref="dialog"  @confirm="formSubmit">
    <el-form :model="dataForm" ref="dataForm" :disabled="dataForm.disabled" label-width="120px">
      <zt-form-item label="排序" prop="sort" rules="required">
                        <el-input v-model="dataForm.sort"></el-input>
                </zt-form-item>
      <zt-form-item label="风险名称" prop="riskName" rules="required">
                        <el-input v-model="dataForm.riskName"></el-input>
                </zt-form-item>
      <zt-form-item label="风险描述" prop="riskDesc" rules="required">
                        <el-input v-model="dataForm.riskDesc"></el-input>
                </zt-form-item>
      <zt-form-item label="风险等级" prop="riskLevel" rules="required">
                        <el-input v-model="dataForm.riskLevel"></el-input>
                </zt-form-item>
    </el-form>
  </zt-dialog>
</template>
<script>
  export default {
    data() {
      return {
        dataForm: {
          id: '',
          sort: '',
          riskName: '',
          riskDesc: '',
          riskLevel: ''
        }
      }
    },
    methods: {
      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()
        },
      // 获取信息
      async getInfo() {
        let params = {
          riskId: this.dataForm.id,
          projectId: this.dataForm.projectId
        }
        let res = await this.$http.get(`/riskTraceRecord/RiskTraceItem/`,{params:params})
        this.dataForm = {
          ...this.dataForm,
          ...res.data
        }
      },
      // 表单提交
      async formSubmit() {
        let res = await this.$http[!this.dataForm.id ? 'post' : 'put']('/riskTraceRecord/RiskTraceItem/', this.dataForm)
        if (res.success) {
          await this.$tip.success()
          this.$refs.dialog.close()
          this.$emit('refreshDataList')
        }
      }
    }
  }
</script>
web/src/views/modules/riskTraceRecord/RiskTraceItem.vue
New file
@@ -0,0 +1,78 @@
<template>
  <el-card shadow="never" class="aui-card--fill">
    <div class="mod-riskTraceRecord-riskTraceItem}">
      <zt-table-wraper query-url="/riskTraceRecord/RiskTraceItem/page" delete-url="/riskTraceRecord/RiskTraceItem/deleteRisk"
                       v-slot="{ table }">
        <el-form :inline="true" :model="dataForm" @keyup.enter.native="table.query()">
          <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="riskTraceRecord:add" @click="add()">新增</zt-button>
            <zt-button type="delete" perm="riskTraceRecord: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="softwareName" label="项目名称"/>
          <el-table-column prop="softwareIdentity" label="项目标识"/>
          <zt-table-column-handle :table="table" edit-perm="riskTraceRecord:update"
                                  delete-perm="riskTraceRecord::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"/>
        <ProjectSelect ref="projectSelect"
                       @refreshDataList="table.query"
                       @setProjectInfo="openAddWin">
        </ProjectSelect>
        <Preview ref="view" :pageMarkerfun="RiskTrace"></Preview>
      </zt-table-wraper>
    </div>
  </el-card>
</template>
<script>
  import AddOrUpdate from './RiskTraceItem-AddOrUpdate'
  import Preview from '@/views/pages/view'
  import ProjectSelect from "../project/Project-select";
  export default {
    data() {
      return {
        RiskTrace:'RiskTrace',
        dataForm: {
          softwareName: '',
          softwareIdentity: ''
        }
      }
    },
    components: {
      AddOrUpdate,
      ProjectSelect,
      Preview
    },
    methods:{
      add() {
        this.$refs.projectSelect.$refs.dialog.init("risk_measure")
      },
      openAddWin(row) {
        console.log(row.id, 'row.id')
        this.$refs.addOrUpdate.$refs.dialog.init(null, {id: null, projectId: row.id})
      },
      preview(row){
        this.$refs.view.openAccessoryFormatSingle(row)
      }
    }
  }
</script>
web/src/views/modules/sys/task/already-task.vue
@@ -54,6 +54,7 @@
    <ConfigItemOutbound ref="configItemOutbound" @refreshDataList="getQuery()"></ConfigItemOutbound>
    <TestCheckOrder ref="testCheckOrder" @refreshDataList="getQuery()"></TestCheckOrder>
    <BaselineRelease ref="baselineRelease" @refreshDataList="getQuery()"></BaselineRelease>
    <QaAuditReport ref="qaAuditReport" @refreshDataList="getQuery()"></QaAuditReport>
    <!--    </zt-table-wraper>-->
  </div>
</template>
@@ -68,6 +69,7 @@
  import ConfigItemChange from "@/views/modules/configItemChange/ConfigItemChange-AddOrUpdate.vue";
  import ConfigItemOutbound from "@/views/modules/configItemOutbound/ConfigItemOutbound-AddOrUpdate.vue";
  import BaselineRelease from "@/views/modules/baselineRelease/BaselineRelease-AddOrUpdate.vue";
  import QaAuditReport from '@/views/modules/qaAuditReport/QaAuditReport-AddOrUpdate'
  export default {
    data() {
@@ -97,7 +99,8 @@
      ConfigItemWarehouse,
      ConfigItemChange,
      ConfigItemOutbound,
      BaselineRelease
      BaselineRelease,
      QaAuditReport
    },
    watch:{
    },
@@ -222,6 +225,10 @@
          this.$nextTick(()=>{
            this.$refs.baselineRelease.$refs.dialog.init(row.bizId,row, true)
          })
        }else if (row.flowCode === 'qashbg') {
          this.$nextTick(()=>{
            this.$refs.qaAuditReport.$refs.dialog.init(row.bizId,row, true)
          })
        }
        else {
          if (row.stepReadRouterId === null){
web/src/views/modules/sys/task/stay-task.vue
@@ -61,6 +61,7 @@
    <ConfigItemOutbound ref="configItemOutbound" @refreshDataList="getQuery()"></ConfigItemOutbound>
    <TestCheckOrder ref="testCheckOrder" @refreshDataList="getQuery()"></TestCheckOrder>
    <BaselineRelease ref="baselineRelease" @refreshDataList="getQuery()"></BaselineRelease>
    <QaAuditReport ref="qaAuditReport" @refreshDataList="getQuery()"></QaAuditReport>
    <!--    </zt-table-wraper>-->
  </div>
</template>
@@ -74,6 +75,7 @@
  import ConfigItemChange from '@/views/modules/configItemChange/ConfigItemChange-AddOrUpdate'
  import ConfigItemOutbound from '@/views/modules/configItemOutbound/ConfigItemOutbound-AddOrUpdate'
  import BaselineRelease from '@/views/modules/baselineRelease/BaselineRelease-AddOrUpdate'
  import QaAuditReport from '@/views/modules/qaAuditReport/QaAuditReport-AddOrUpdate'
  export default {
    data() {
@@ -118,6 +120,7 @@
      ConfigItemChange,
      ConfigItemOutbound,
      BaselineRelease,
      QaAuditReport
    },
    created() {
      if (this.$route.path.indexOf('taskCenter') > 0 || this.system == 'smj') {
@@ -237,6 +240,8 @@
          this.$refs.configItemOutbound.$refs.dialog.init(row.bizId, row)
        }else if (row.flowCode === 'jxfb') {
          this.$refs.baselineRelease.$refs.dialog.init(row.bizId, row)
        }else if (row.flowCode === 'qashbg') {
          this.$refs.qaAuditReport.$refs.dialog.init(row.bizId, row)
        }else {
          if (row.stepRouterId === null) {
            this.$tip.alert("没有配置菜单id")
web/src/views/modules/sys/workflowConfig/workflow-config-add-update.vue
@@ -66,7 +66,7 @@
      <zt-form-item label="任务分组" prop="taskGroup" >
        <el-select v-model="dataForm.taskGroup" value-key="value" style="width: 100%">
          <el-option v-for="item in taskGrouList" :key="item.id" :label="item.name" :value="item.value"></el-option>
          <el-option v-for="item in taskGroupList" :key="item.id" :label="item.name" :value="item.value"></el-option>
        </el-select>
      </zt-form-item>
@@ -129,12 +129,15 @@
          stepRouterId:'',
          stepReadRouterId:''
        },
        taskGrouList:[{id:'0',value:'',name:'无'},
          {id:'1',value:'cj',name:'厂家'},
          {id:'2',value:'zy',name:'专业'},
        taskGroupList:[{id:'0',value:'',name:'无'},
          {id:'3',value:'sqr',name:'申请人'},
          {id:'4',value:'br',name:'指定人'},
          {id:'5',value:'js',name:'用户角色'}
          {id:'5',value:'js',name:'用户角色'},
          {id:'10',value:'pall',name:'项目所有人员'},
          {id:'11',value:'zrr',name:'项目责任人'},
          {id:'12',value:'csr',name:'项目测试员'},
          {id:'13',value:'shr',name:'项目审核员'},
          {id:'14',value:'pzr',name:'项目配置员'}
          ],
         menuIdList1:[],
        menuIdListChild:[]
web/vue.config.js
@@ -19,7 +19,7 @@
  productionSourceMap: false,
  devServer: {
    open: true,
    port: 8008,
    port: 8020,
    overlay: {
      errors: true,
      warnings: true
zt/common/src/main/java/com/zt/core/sys/model/SysDept.java
@@ -37,7 +37,7 @@
@TableName("SYS_DEPT")
public class SysDept extends CompanyEntity implements TreeNode<SysDept>, Cloneable {
    private static final long serialVersionUID = 1L;
    private Long id;
    @ApiModelProperty(value = "上级ID")
    @NotNull(message = "上级ID,不能为空", groups = DefaultGroup.class)
    private Long pid;
zt/core/src/main/java/com/zt/modules/sys/controller/SysDeptController.java
@@ -42,7 +42,14 @@
    @RequiresPermissions("sys:dept:list")
    public Result<List<SysDept>> pageList(@RequestParam Long companyId) {
        List<SysDept> list = sysDeptService.getDeptList(companyId);
        return Result.ok(list);
    }
    @GetMapping("getList")
    @ApiOperation("部门列表")
    // @RequiresPermissions("sys:dept:list")
    public Result<List<SysDept>> getlist() {
        List<SysDept> list = sysDeptService.getDeptList3();
        return Result.ok(list);
    }
@@ -51,7 +58,6 @@
    // @RequiresPermissions("sys:dept:list")
    public Result<List<SysDept>> list() {
        List<SysDept> list = sysDeptService.getDeptTree();
        return Result.ok(list);
    }
@@ -60,7 +66,6 @@
    // @RequiresPermissions("sys:dept:list")
    public Result<List<SysDept>> list2() {
        List<SysDept> list = sysDeptService.getDeptTreeRegister();
        return Result.ok(list);
    }
zt/core/src/main/java/com/zt/modules/sys/controller/SysRoleController.java
@@ -103,7 +103,7 @@
    @PostMapping
    @ApiOperation("新增")
    @LogOperation("角色管理--->新增")
    @LogOperation("权限管理--->新增")
    @RequiresPermissions("sys:role")
    public Result insert(@RequestBody SysRole entity) {
        // 效验数据
@@ -116,7 +116,7 @@
    @PutMapping
    @ApiOperation("修改")
    @LogOperation("角色管理--->修改")
    @LogOperation("权限管理--->修改")
    @RequiresPermissions("sys:role:update")
    public Result update(@RequestBody SysRole entity) {
        // 效验数据
@@ -129,7 +129,7 @@
    @DeleteMapping
    @ApiOperation("删除")
    @LogOperation("角色管理--->删除")
    @LogOperation("权限管理--->删除")
    @RequiresPermissions("sys:role:delete")
    public Result delete(@RequestBody Long[] ids) {
        // 效验数据
@@ -150,6 +150,7 @@
    @PostMapping("menu")
    @ApiOperation("配置菜单权限")
    @LogOperation("权限管理--->配置菜单权限")
    @RequiresPermissions("sys:role:menu")
    public Result setRoleMenu(@RequestBody RoleMenuDto entity) {
@@ -190,7 +191,7 @@
    @PostMapping("addroleuser")
    @ApiOperation("添加角色人员")
    @LogOperation("角色管理--->添加角色人员")
    @LogOperation("权限管理--->添加角色人员")
    @RequiresPermissions("sys:role:update")
    public Result addRoleUser(@RequestBody RoleMenuDto model) {
@@ -201,7 +202,7 @@
    @PostMapping("deleteRoleUsers")
    @ApiOperation("删除角色用户")
    @LogOperation("角色管理--->删除角色用户")
    @LogOperation("权限管理--->删除角色用户")
    public Result deleteRoleUsers(@RequestBody SysRoleUser model) {
        List<SysRoleUser> list = sysRoleUserService.getSingleRoleUsers(model.getRoleId(), model.getUserId());
        sysRoleUserService.deleteLogic(list);
zt/core/src/main/java/com/zt/modules/sys/controller/SysUserController.java
@@ -231,4 +231,10 @@
        sysRoleUserService.saveOrUpdate(dto.getUserId(), dto.getRoleIdList());
        return Result.ok();
    }
    @PostMapping("getNameById")
    @ApiOperation("用户名")
    public Result getNameById(@RequestBody String ids) {
        sysUserService.getNames(ids);
        return Result.ok();
    }
}
zt/core/src/main/java/com/zt/modules/sys/dao/SysDeptDao.java
@@ -32,4 +32,5 @@
    List<SysDept> getListByParent(Map<String, Object> params);
    List<SysDept> getDeptList3();
}
zt/core/src/main/java/com/zt/modules/sys/dao/SysUserDao.java
@@ -54,7 +54,7 @@
    void updatePassword(SysUser entity);
    Integer checkTestHome(String systemId, Long userId);
    List<SysUser> getUsersList();
    List<SysUser> getUsersList(String type, String deptId);
    String getUsersName(String id);
}
zt/core/src/main/java/com/zt/modules/sys/service/SysDeptService.java
@@ -126,9 +126,9 @@
        QueryFilter queryFilter = new QueryFilter();
        // 普通管理员,只能查询所属部门及子部门的数据
        User user = UserContext.getUser();
        if (!user.isSuperAdmin()) {
/*        if (!user.isSuperAdmin()) {
            queryFilter.addParam("deptIds", this.getWithDescendantIds(user.getDeptId()));
        }
        }*/
        // 查询公司下部门列表
        queryFilter.addParam("isCompany", Constant.Bool.NO);
        queryFilter.addParam("companyId", companyId);
@@ -432,4 +432,8 @@
        }
        return result;
    }
    public List<SysDept> getDeptList3() {
        return baseDao.getDeptList3();
    }
}
zt/core/src/main/java/com/zt/modules/sys/service/SysUserService.java
@@ -331,8 +331,9 @@
        return num;
    }
    public List<SysUser> getUsersList() {
        return baseDao.getUsersList();
    public List<SysUser> getUsersList(String type, String deptId) {
        List<SysUser> list = baseDao.getUsersList(type,deptId);
        return list;
    }
    public String getUsersName(String id) {
zt/core/src/main/java/com/zt/modules/workflow/dao/WfRunTaskDao.java
@@ -29,7 +29,7 @@
@Mapper
public interface WfRunTaskDao extends BaseDao<WfRunTask> {
    List<SysUser> getTaskUser(@Param("roleId") String roleId, @Param("deptIds") String deptIds, @Param("zyIds") String zyIds);
    List<SysUser> getTaskUser(@Param("roleId") String roleId, @Param("deptIds") String deptIds);
    List<SysUser> getAssignUser(String code, String stepMarker, Long bizId);
    SysUser getUserById(Long userId);
zt/core/src/main/java/com/zt/modules/workflow/dto/BizInfoDto.java
@@ -14,4 +14,9 @@
    String applyUser;
    Date applyTime;
    String param;
    String zrr;
    String csr;
    String shr;
    String pzr;
    String pall;
}
zt/core/src/main/java/com/zt/modules/workflow/service/WorkflowService.java
@@ -294,36 +294,15 @@
        taskParamDto.setBizInfoDto(bizInfoDto);
        if (finallyStep.getStepNo() > currentStep.getStepNo()) {
            String roleIds = currentStep.getApproverRoleIds();
            if (!StringUtils.isBlank(roleIds)) {
                roleIds = roleIds.replace(",,", ",");
                roleIds = roleIds.replace(",,", ",");
            }
            if (StringUtils.isBlank(roleIds)) {
                throw new RuntimeException("没有设置下一步流程角色!");
            }
            Integer isSelfDept = currentStep.getIsSelfDept();
            String[] roleIdArr = roleIds.split(",");
            if (isSelfDept > 0 && bizInfoList.size() > 0) {
                deptIds = bizInfoList.get(0).getDeptIds();
            if (isSelfDept > 0 && bizInfoDto!=null) {
                deptIds = bizInfoDto.getDeptIds();
            }
            if (isSelfDept == 0)
                deptIds = null;
            String zyIds = null;
            String bizGroupId = bizInfoList.get(0).getBizId();
            if (!StringUtils.isBlank(currentStep.getTaskGroup())
                    && !StringUtils.isBlank(currentStep.getTaskGroupSql())) {
                sqlStr = currentStep.getTaskGroupSql();
                sqlStr = sqlStr.replace("${bizId}", bizId.toString());
                sqlStr = sqlStr.replace("${bizGroupId}", bizGroupId);
                List<BizInfoDto> bizInfoList2 = baseDao.getSqlResult(sqlStr);
                if ("cj".equals(currentStep.getTaskGroup()))
                    deptIds = bizInfoList2.get(0).getId();
                if ("zy".equals(currentStep.getTaskGroup()))
                    zyIds = bizInfoList2.get(0).getId();
            }
            if ("br".equals(currentStep.getTaskGroup())) {
                List<SysUser> listUser = baseDao.getAssignUser(wfDef.getCode(), currentStep.getStepMarker(), bizId);
                for (SysUser user : listUser) {
@@ -335,6 +314,36 @@
                    taskParamDto.setGroupId2(user.getId());
                    insertFlowTaskData(taskParamDto);
                }
            }
            else if (currentStep.getTaskGroup() !=null && "pall,zrr,csr,shr,pzr".contains(currentStep.getTaskGroup())) {
                String userList = null;
                if ("zrr".equals(currentStep.getTaskGroup())){
                    userList = bizInfoDto.getZrr();
                }
                if ("csr".equals(currentStep.getTaskGroup())){
                    userList = bizInfoDto.getCsr();
                }
                if ("shr".equals(currentStep.getTaskGroup())){
                    userList = bizInfoDto.getShr();
                }
                if ("pzr".equals(currentStep.getTaskGroup())){
                    userList = bizInfoDto.getPzr();
                }
                if ("pall".equals(currentStep.getTaskGroup())){
                    userList = bizInfoDto.getPall();
                }
                if (userList != null) {
                    String[] userArr = userList.split(",");
                    Long groupId2 = UUIDUtil.generateId();
                    for (String userStr : userArr) {
                        Long userId = Convert.toLong(userStr);
                        SysUser user = baseDao.getUserById(userId);
                        existsUsers.put(userId, "");
                        taskParamDto.setUser(user);
                        taskParamDto.setGroupId2(groupId2);
                        insertFlowTaskData(taskParamDto);
                    }
                }
            } else if ("sqr".equals(currentStep.getTaskGroup())) {
                SysUser user = baseDao.getUserById(bizInfoList.get(0).getApplyUserId());
                existsUsers.put(user.getId(), "");
@@ -342,8 +351,15 @@
                taskParamDto.setGroupId2(user.getId());
                insertFlowTaskData(taskParamDto);
            } else {
                String roleIds = currentStep.getApproverRoleIds();
                if (StringUtils.isBlank(roleIds)) {
                    throw new RuntimeException("没有设置下一步流程角色!");
                }
                String[] roleIdArr = roleIds.split(",");
                for (String roleId : roleIdArr) {
                    List<SysUser> listUser = baseDao.getTaskUser(roleId, deptIds, zyIds);
                    if (StringUtils.isBlank(roleId))
                        continue;
                    List<SysUser> listUser = baseDao.getTaskUser(roleId, deptIds);
                    for (SysUser user : listUser) {
                        if (existsUsers.containsKey(user.getId())) {
                            continue;
zt/core/src/main/resources/mapper/log/SysLogLoginDao.xml
@@ -3,11 +3,7 @@
<mapper namespace="com.zt.modules.log.dao.SysLogLoginDao">
    <select id="getList" resultType="com.zt.modules.log.model.SysLogLogin">
        select * from (
            select a.*
                ,(SELECT replace(GROUP_CONCAT(aa.name),',',';') FROM sys_role aa,sys_role_user bb WHERE aa.id=bb.role_id AND bb.user_id = a.creator) AS role_names
            from sys_log_login a
        ) a
            select a.* from sys_log_login a
        <where>
            <if test="status!=null">
              and  status=#{status}
@@ -19,10 +15,12 @@
                and 1 = 1
            </if>
            <if test="action == 'xtbmybm'">
                and role_names NOT LIKE '%xtgly%'  OR role_names NOT LIKE '%xtsjy%'
                and a.creator not in (select user_id from sys_role_user
                where role_id in (select id from sys_role where code in ('xtglybm','xtbmybm','xtsjybm')))
            </if>
            <if test="action == 'xtsjybm'">
                and role_names LIKE '%xtgly%'  OR role_names LIKE '%xtsjy%'
                and a.creator in (select user_id from sys_role_user
                where role_id in (select id from sys_role where code in ('xtglybm','xtbmybm')))
            </if>
            <if test="action == 'other'">
                and a.CREATOR = ${currentUserId}
@@ -30,7 +28,6 @@
            <if test="order!=null and order!=''">
                order by a.CREATE_DATE  ${order}
            </if>
            <if test="order==null">
                order by a.CREATE_DATE
            </if>
zt/core/src/main/resources/mapper/log/SysLogOperationDao.xml
@@ -20,11 +20,8 @@
    </sql>
    <select id="getList" resultType="com.zt.modules.log.model.SysLogOperation">
        select * from (
        select a.*
        ,(SELECT replace(GROUP_CONCAT(aa.name),',',';') FROM sys_role aa,sys_role_user bb WHERE aa.id=bb.role_id AND bb.user_id = a.creator) AS role_names
        from sys_log_operation a
        ) a
        <where>
            <if test="whereSql!=null">
                ${whereSql}
@@ -33,32 +30,12 @@
                and 1 = 1
            </if>
            <if test="action == 'xtbmybm'">
                and role_names NOT LIKE '%xtgly%'  OR role_names NOT LIKE '%xtsjy%'
                and request_uri not IN (
                SELECT
                a.dict_label AS urlLabel
                FROM
                sys_dict_data a,
                sys_dict_type b
                WHERE 1=1
                AND b.dict_type = 'adminURL'
                AND b.id = a.dict_type_id
                AND b.is_delete = 0
                )
                and a.creator not in (select user_id from sys_role_user
                where role_id in (select id from sys_role where code in ('xtglybm','xtbmybm','xtsjybm')))
            </if>
            <if test="action == 'xtsjybm'">
                and role_names LIKE '%xtgly%'  OR role_names LIKE '%xtsjy%'
                and request_uri IN (
                SELECT
                a.dict_label AS urlLabel
                FROM
                sys_dict_data a,
                sys_dict_type b
                WHERE 1=1
                AND b.dict_type = 'adminURL'
                AND b.id = a.dict_type_id
                AND b.is_delete = 0
                )
                and a.creator in (select user_id from sys_role_user
                where role_id in (select id from sys_role where code in ('xtglybm','xtbmybm')))
            </if>
            <if test="action == 'other'">
                and a.creator = ${currentUserId}
zt/core/src/main/resources/mapper/sys/SysDeptDao.xml
@@ -82,5 +82,11 @@
        <if test="pId != null">
            and pid = #{pId}
        </if>
    </select>
    <select id="getDeptList3" resultType="com.zt.core.sys.model.SysDept">
        select id, name
        from sys_dept
        where IS_COMPANY = 0
        order by sort
    </select>
</mapper>
zt/core/src/main/resources/mapper/sys/SysUserDao.xml
@@ -239,6 +239,35 @@
    </select>
    <select id="getUsersList" resultType="com.zt.core.sys.model.SysUser">
        select real_name as name,id as id from sys_user
        where is_delete = 0
        <if test="type == null or type == ''">
            and id not in (
            select user_id from sys_role_user where role_id
            in (select id from sys_role where code in ('xtglybm','xtbmybm','xtsjybm','rx')))
        </if>
        <if test="deptId != null and deptId != ''">
            and dept_id = #{deptId}
        </if>
        <if test="type == 'zrr'">
            and id in (
            select user_id from sys_role_user where role_id
            in (select id from sys_role where code in ('jcry')))
        </if>
        <if test="type == 'csry'">
            and id in (
            select user_id from sys_role_user where role_id
            in (select id from sys_role where code in ('jcry')))
        </if>
        <if test="type == 'shry'">
            and id in (
            select user_id from sys_role_user where role_id
            in (select id from sys_role where code in ('jcry','zljdy','shry')))
        </if>
        <if test="type == 'pzry'">
            and id in (
            select user_id from sys_role_user where role_id
            in (select id from sys_role where code in ('jcry','shry')))
        </if>
    </select>
    <select id="getUsersName" resultType="java.lang.String">
        select real_name from sys_user WHERE id=${id}
zt/core/src/main/resources/mapper/workflow/WfRunTaskDao.xml
@@ -41,10 +41,6 @@
            CONCAT( ',', #{deptIds}, ',' ) LIKE CONCAT( '%,', id, ',%' )
            )
        </if>
        <if test="zyIds!=null and zyIds!=''">
            AND CONCAT( ',', #{zyIds}, ',' ) LIKE CONCAT( '%,', teamgroup, ',%' )
        </if>
    </select>
    <select id="getAssignUser" resultType="com.zt.core.sys.model.SysUser">
zt/core/src/main/resources/mapper/workflowconfig/WfDefStepDao.xml
@@ -139,6 +139,7 @@
        ) a
        LEFT JOIN sys_dept d ON a.company_id = d.id
        WHERE a.id not in (select id from sys_role where code in ('xtglybm','xtbmybm','xtsjybm','rx'))
        ORDER BY d.name, a.sort
    </select>