refactor(缺陷管理): 优化缺陷功能关联附件逻辑

This commit is contained in:
song-cc-rock 2023-11-16 13:54:24 +08:00 committed by 刘瑞斌
parent 030259d11e
commit fe0cf474fc
19 changed files with 207 additions and 337 deletions

View File

@ -13,35 +13,31 @@ import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
@Data @Data
public class BugAttachment implements Serializable { public class BugLocalAttachment implements Serializable {
@Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "ID", requiredMode = Schema.RequiredMode.REQUIRED)
@NotBlank(message = "{bug_attachment.id.not_blank}", groups = {Updated.class}) @NotBlank(message = "{bug_local_attachment.id.not_blank}", groups = {Updated.class})
@Size(min = 1, max = 255, message = "{bug_attachment.id.length_range}", groups = {Created.class, Updated.class}) @Size(min = 1, max = 255, message = "{bug_local_attachment.id.length_range}", groups = {Created.class, Updated.class})
private String id; private String id;
@Schema(description = "缺陷ID", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "缺陷ID", requiredMode = Schema.RequiredMode.REQUIRED)
@NotBlank(message = "{bug_attachment.bug_id.not_blank}", groups = {Created.class}) @NotBlank(message = "{bug_local_attachment.bug_id.not_blank}", groups = {Created.class})
@Size(min = 1, max = 50, message = "{bug_attachment.bug_id.length_range}", groups = {Created.class, Updated.class}) @Size(min = 1, max = 50, message = "{bug_local_attachment.bug_id.length_range}", groups = {Created.class, Updated.class})
private String bugId; private String bugId;
@Schema(description = "文件ID", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "文件ID", requiredMode = Schema.RequiredMode.REQUIRED)
@NotBlank(message = "{bug_attachment.file_id.not_blank}", groups = {Created.class}) @NotBlank(message = "{bug_local_attachment.file_id.not_blank}", groups = {Created.class})
@Size(min = 1, max = 50, message = "{bug_attachment.file_id.length_range}", groups = {Created.class, Updated.class}) @Size(min = 1, max = 50, message = "{bug_local_attachment.file_id.length_range}", groups = {Created.class, Updated.class})
private String fileId; private String fileId;
@Schema(description = "文件名称", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "文件名称", requiredMode = Schema.RequiredMode.REQUIRED)
@NotBlank(message = "{bug_attachment.file_name.not_blank}", groups = {Created.class}) @NotBlank(message = "{bug_local_attachment.file_name.not_blank}", groups = {Created.class})
@Size(min = 1, max = 255, message = "{bug_attachment.file_name.length_range}", groups = {Created.class, Updated.class}) @Size(min = 1, max = 255, message = "{bug_local_attachment.file_name.length_range}", groups = {Created.class, Updated.class})
private String fileName; private String fileName;
@Schema(description = "文件大小", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "文件大小", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "{bug_attachment.size.not_blank}", groups = {Created.class}) @NotNull(message = "{bug_local_attachment.size.not_blank}", groups = {Created.class})
private Long size; private Long size;
@Schema(description = "是否本地", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "{bug_attachment.local.not_blank}", groups = {Created.class})
private Boolean local;
@Schema(description = "创建人") @Schema(description = "创建人")
private String createUser; private String createUser;
@ -56,7 +52,6 @@ public class BugAttachment implements Serializable {
fileId("file_id", "fileId", "VARCHAR", false), fileId("file_id", "fileId", "VARCHAR", false),
fileName("file_name", "fileName", "VARCHAR", false), fileName("file_name", "fileName", "VARCHAR", false),
size("size", "size", "BIGINT", true), size("size", "size", "BIGINT", true),
local("local", "local", "BIT", true),
createUser("create_user", "createUser", "VARCHAR", false), createUser("create_user", "createUser", "VARCHAR", false),
createTime("create_time", "createTime", "BIGINT", false); createTime("create_time", "createTime", "BIGINT", false);

View File

@ -3,14 +3,14 @@ package io.metersphere.bug.domain;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
public class BugAttachmentExample { public class BugLocalAttachmentExample {
protected String orderByClause; protected String orderByClause;
protected boolean distinct; protected boolean distinct;
protected List<Criteria> oredCriteria; protected List<Criteria> oredCriteria;
public BugAttachmentExample() { public BugLocalAttachmentExample() {
oredCriteria = new ArrayList<Criteria>(); oredCriteria = new ArrayList<Criteria>();
} }
@ -444,66 +444,6 @@ public class BugAttachmentExample {
return (Criteria) this; return (Criteria) this;
} }
public Criteria andLocalIsNull() {
addCriterion("`local` is null");
return (Criteria) this;
}
public Criteria andLocalIsNotNull() {
addCriterion("`local` is not null");
return (Criteria) this;
}
public Criteria andLocalEqualTo(Boolean value) {
addCriterion("`local` =", value, "local");
return (Criteria) this;
}
public Criteria andLocalNotEqualTo(Boolean value) {
addCriterion("`local` <>", value, "local");
return (Criteria) this;
}
public Criteria andLocalGreaterThan(Boolean value) {
addCriterion("`local` >", value, "local");
return (Criteria) this;
}
public Criteria andLocalGreaterThanOrEqualTo(Boolean value) {
addCriterion("`local` >=", value, "local");
return (Criteria) this;
}
public Criteria andLocalLessThan(Boolean value) {
addCriterion("`local` <", value, "local");
return (Criteria) this;
}
public Criteria andLocalLessThanOrEqualTo(Boolean value) {
addCriterion("`local` <=", value, "local");
return (Criteria) this;
}
public Criteria andLocalIn(List<Boolean> values) {
addCriterion("`local` in", values, "local");
return (Criteria) this;
}
public Criteria andLocalNotIn(List<Boolean> values) {
addCriterion("`local` not in", values, "local");
return (Criteria) this;
}
public Criteria andLocalBetween(Boolean value1, Boolean value2) {
addCriterion("`local` between", value1, value2, "local");
return (Criteria) this;
}
public Criteria andLocalNotBetween(Boolean value1, Boolean value2) {
addCriterion("`local` not between", value1, value2, "local");
return (Criteria) this;
}
public Criteria andCreateUserIsNull() { public Criteria andCreateUserIsNull() {
addCriterion("create_user is null"); addCriterion("create_user is null");
return (Criteria) this; return (Criteria) this;

View File

@ -1,35 +0,0 @@
package io.metersphere.bug.mapper;
import io.metersphere.bug.domain.BugAttachment;
import io.metersphere.bug.domain.BugAttachmentExample;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface BugAttachmentMapper {
long countByExample(BugAttachmentExample example);
int deleteByExample(BugAttachmentExample example);
int deleteByPrimaryKey(String id);
int insert(BugAttachment record);
int insertSelective(BugAttachment record);
List<BugAttachment> selectByExample(BugAttachmentExample example);
BugAttachment selectByPrimaryKey(String id);
int updateByExampleSelective(@Param("record") BugAttachment record, @Param("example") BugAttachmentExample example);
int updateByExample(@Param("record") BugAttachment record, @Param("example") BugAttachmentExample example);
int updateByPrimaryKeySelective(BugAttachment record);
int updateByPrimaryKey(BugAttachment record);
int batchInsert(@Param("list") List<BugAttachment> list);
int batchInsertSelective(@Param("list") List<BugAttachment> list, @Param("selective") BugAttachment.Column ... selective);
}

View File

@ -0,0 +1,35 @@
package io.metersphere.bug.mapper;
import io.metersphere.bug.domain.BugLocalAttachment;
import io.metersphere.bug.domain.BugLocalAttachmentExample;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface BugLocalAttachmentMapper {
long countByExample(BugLocalAttachmentExample example);
int deleteByExample(BugLocalAttachmentExample example);
int deleteByPrimaryKey(String id);
int insert(BugLocalAttachment record);
int insertSelective(BugLocalAttachment record);
List<BugLocalAttachment> selectByExample(BugLocalAttachmentExample example);
BugLocalAttachment selectByPrimaryKey(String id);
int updateByExampleSelective(@Param("record") BugLocalAttachment record, @Param("example") BugLocalAttachmentExample example);
int updateByExample(@Param("record") BugLocalAttachment record, @Param("example") BugLocalAttachmentExample example);
int updateByPrimaryKeySelective(BugLocalAttachment record);
int updateByPrimaryKey(BugLocalAttachment record);
int batchInsert(@Param("list") List<BugLocalAttachment> list);
int batchInsertSelective(@Param("list") List<BugLocalAttachment> list, @Param("selective") BugLocalAttachment.Column ... selective);
}

View File

@ -1,13 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?> <?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"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="io.metersphere.bug.mapper.BugAttachmentMapper"> <mapper namespace="io.metersphere.bug.mapper.BugLocalAttachmentMapper">
<resultMap id="BaseResultMap" type="io.metersphere.bug.domain.BugAttachment"> <resultMap id="BaseResultMap" type="io.metersphere.bug.domain.BugLocalAttachment">
<id column="id" jdbcType="VARCHAR" property="id" /> <id column="id" jdbcType="VARCHAR" property="id" />
<result column="bug_id" jdbcType="VARCHAR" property="bugId" /> <result column="bug_id" jdbcType="VARCHAR" property="bugId" />
<result column="file_id" jdbcType="VARCHAR" property="fileId" /> <result column="file_id" jdbcType="VARCHAR" property="fileId" />
<result column="file_name" jdbcType="VARCHAR" property="fileName" /> <result column="file_name" jdbcType="VARCHAR" property="fileName" />
<result column="size" jdbcType="BIGINT" property="size" /> <result column="size" jdbcType="BIGINT" property="size" />
<result column="local" jdbcType="BIT" property="local" />
<result column="create_user" jdbcType="VARCHAR" property="createUser" /> <result column="create_user" jdbcType="VARCHAR" property="createUser" />
<result column="create_time" jdbcType="BIGINT" property="createTime" /> <result column="create_time" jdbcType="BIGINT" property="createTime" />
</resultMap> </resultMap>
@ -70,15 +69,15 @@
</where> </where>
</sql> </sql>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id, bug_id, file_id, file_name, `size`, `local`, create_user, create_time id, bug_id, file_id, file_name, `size`, create_user, create_time
</sql> </sql>
<select id="selectByExample" parameterType="io.metersphere.bug.domain.BugAttachmentExample" resultMap="BaseResultMap"> <select id="selectByExample" parameterType="io.metersphere.bug.domain.BugLocalAttachmentExample" resultMap="BaseResultMap">
select select
<if test="distinct"> <if test="distinct">
distinct distinct
</if> </if>
<include refid="Base_Column_List" /> <include refid="Base_Column_List" />
from bug_attachment from bug_local_attachment
<if test="_parameter != null"> <if test="_parameter != null">
<include refid="Example_Where_Clause" /> <include refid="Example_Where_Clause" />
</if> </if>
@ -89,29 +88,29 @@
<select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap"> <select id="selectByPrimaryKey" parameterType="java.lang.String" resultMap="BaseResultMap">
select select
<include refid="Base_Column_List" /> <include refid="Base_Column_List" />
from bug_attachment from bug_local_attachment
where id = #{id,jdbcType=VARCHAR} where id = #{id,jdbcType=VARCHAR}
</select> </select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.String"> <delete id="deleteByPrimaryKey" parameterType="java.lang.String">
delete from bug_attachment delete from bug_local_attachment
where id = #{id,jdbcType=VARCHAR} where id = #{id,jdbcType=VARCHAR}
</delete> </delete>
<delete id="deleteByExample" parameterType="io.metersphere.bug.domain.BugAttachmentExample"> <delete id="deleteByExample" parameterType="io.metersphere.bug.domain.BugLocalAttachmentExample">
delete from bug_attachment delete from bug_local_attachment
<if test="_parameter != null"> <if test="_parameter != null">
<include refid="Example_Where_Clause" /> <include refid="Example_Where_Clause" />
</if> </if>
</delete> </delete>
<insert id="insert" parameterType="io.metersphere.bug.domain.BugAttachment"> <insert id="insert" parameterType="io.metersphere.bug.domain.BugLocalAttachment">
insert into bug_attachment (id, bug_id, file_id, insert into bug_local_attachment (id, bug_id, file_id,
file_name, `size`, `local`, create_user, file_name, `size`, create_user,
create_time) create_time)
values (#{id,jdbcType=VARCHAR}, #{bugId,jdbcType=VARCHAR}, #{fileId,jdbcType=VARCHAR}, values (#{id,jdbcType=VARCHAR}, #{bugId,jdbcType=VARCHAR}, #{fileId,jdbcType=VARCHAR},
#{fileName,jdbcType=VARCHAR}, #{size,jdbcType=BIGINT}, #{local,jdbcType=BIT}, #{createUser,jdbcType=VARCHAR}, #{fileName,jdbcType=VARCHAR}, #{size,jdbcType=BIGINT}, #{createUser,jdbcType=VARCHAR},
#{createTime,jdbcType=BIGINT}) #{createTime,jdbcType=BIGINT})
</insert> </insert>
<insert id="insertSelective" parameterType="io.metersphere.bug.domain.BugAttachment"> <insert id="insertSelective" parameterType="io.metersphere.bug.domain.BugLocalAttachment">
insert into bug_attachment insert into bug_local_attachment
<trim prefix="(" suffix=")" suffixOverrides=","> <trim prefix="(" suffix=")" suffixOverrides=",">
<if test="id != null"> <if test="id != null">
id, id,
@ -128,9 +127,6 @@
<if test="size != null"> <if test="size != null">
`size`, `size`,
</if> </if>
<if test="local != null">
`local`,
</if>
<if test="createUser != null"> <if test="createUser != null">
create_user, create_user,
</if> </if>
@ -154,9 +150,6 @@
<if test="size != null"> <if test="size != null">
#{size,jdbcType=BIGINT}, #{size,jdbcType=BIGINT},
</if> </if>
<if test="local != null">
#{local,jdbcType=BIT},
</if>
<if test="createUser != null"> <if test="createUser != null">
#{createUser,jdbcType=VARCHAR}, #{createUser,jdbcType=VARCHAR},
</if> </if>
@ -165,14 +158,14 @@
</if> </if>
</trim> </trim>
</insert> </insert>
<select id="countByExample" parameterType="io.metersphere.bug.domain.BugAttachmentExample" resultType="java.lang.Long"> <select id="countByExample" parameterType="io.metersphere.bug.domain.BugLocalAttachmentExample" resultType="java.lang.Long">
select count(*) from bug_attachment select count(*) from bug_local_attachment
<if test="_parameter != null"> <if test="_parameter != null">
<include refid="Example_Where_Clause" /> <include refid="Example_Where_Clause" />
</if> </if>
</select> </select>
<update id="updateByExampleSelective" parameterType="map"> <update id="updateByExampleSelective" parameterType="map">
update bug_attachment update bug_local_attachment
<set> <set>
<if test="record.id != null"> <if test="record.id != null">
id = #{record.id,jdbcType=VARCHAR}, id = #{record.id,jdbcType=VARCHAR},
@ -189,9 +182,6 @@
<if test="record.size != null"> <if test="record.size != null">
`size` = #{record.size,jdbcType=BIGINT}, `size` = #{record.size,jdbcType=BIGINT},
</if> </if>
<if test="record.local != null">
`local` = #{record.local,jdbcType=BIT},
</if>
<if test="record.createUser != null"> <if test="record.createUser != null">
create_user = #{record.createUser,jdbcType=VARCHAR}, create_user = #{record.createUser,jdbcType=VARCHAR},
</if> </if>
@ -204,21 +194,20 @@
</if> </if>
</update> </update>
<update id="updateByExample" parameterType="map"> <update id="updateByExample" parameterType="map">
update bug_attachment update bug_local_attachment
set id = #{record.id,jdbcType=VARCHAR}, set id = #{record.id,jdbcType=VARCHAR},
bug_id = #{record.bugId,jdbcType=VARCHAR}, bug_id = #{record.bugId,jdbcType=VARCHAR},
file_id = #{record.fileId,jdbcType=VARCHAR}, file_id = #{record.fileId,jdbcType=VARCHAR},
file_name = #{record.fileName,jdbcType=VARCHAR}, file_name = #{record.fileName,jdbcType=VARCHAR},
`size` = #{record.size,jdbcType=BIGINT}, `size` = #{record.size,jdbcType=BIGINT},
`local` = #{record.local,jdbcType=BIT},
create_user = #{record.createUser,jdbcType=VARCHAR}, create_user = #{record.createUser,jdbcType=VARCHAR},
create_time = #{record.createTime,jdbcType=BIGINT} create_time = #{record.createTime,jdbcType=BIGINT}
<if test="_parameter != null"> <if test="_parameter != null">
<include refid="Update_By_Example_Where_Clause" /> <include refid="Update_By_Example_Where_Clause" />
</if> </if>
</update> </update>
<update id="updateByPrimaryKeySelective" parameterType="io.metersphere.bug.domain.BugAttachment"> <update id="updateByPrimaryKeySelective" parameterType="io.metersphere.bug.domain.BugLocalAttachment">
update bug_attachment update bug_local_attachment
<set> <set>
<if test="bugId != null"> <if test="bugId != null">
bug_id = #{bugId,jdbcType=VARCHAR}, bug_id = #{bugId,jdbcType=VARCHAR},
@ -232,9 +221,6 @@
<if test="size != null"> <if test="size != null">
`size` = #{size,jdbcType=BIGINT}, `size` = #{size,jdbcType=BIGINT},
</if> </if>
<if test="local != null">
`local` = #{local,jdbcType=BIT},
</if>
<if test="createUser != null"> <if test="createUser != null">
create_user = #{createUser,jdbcType=VARCHAR}, create_user = #{createUser,jdbcType=VARCHAR},
</if> </if>
@ -244,29 +230,28 @@
</set> </set>
where id = #{id,jdbcType=VARCHAR} where id = #{id,jdbcType=VARCHAR}
</update> </update>
<update id="updateByPrimaryKey" parameterType="io.metersphere.bug.domain.BugAttachment"> <update id="updateByPrimaryKey" parameterType="io.metersphere.bug.domain.BugLocalAttachment">
update bug_attachment update bug_local_attachment
set bug_id = #{bugId,jdbcType=VARCHAR}, set bug_id = #{bugId,jdbcType=VARCHAR},
file_id = #{fileId,jdbcType=VARCHAR}, file_id = #{fileId,jdbcType=VARCHAR},
file_name = #{fileName,jdbcType=VARCHAR}, file_name = #{fileName,jdbcType=VARCHAR},
`size` = #{size,jdbcType=BIGINT}, `size` = #{size,jdbcType=BIGINT},
`local` = #{local,jdbcType=BIT},
create_user = #{createUser,jdbcType=VARCHAR}, create_user = #{createUser,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=BIGINT} create_time = #{createTime,jdbcType=BIGINT}
where id = #{id,jdbcType=VARCHAR} where id = #{id,jdbcType=VARCHAR}
</update> </update>
<insert id="batchInsert" parameterType="map"> <insert id="batchInsert" parameterType="map">
insert into bug_attachment insert into bug_local_attachment
(id, bug_id, file_id, file_name, `size`, `local`, create_user, create_time) (id, bug_id, file_id, file_name, `size`, create_user, create_time)
values values
<foreach collection="list" item="item" separator=","> <foreach collection="list" item="item" separator=",">
(#{item.id,jdbcType=VARCHAR}, #{item.bugId,jdbcType=VARCHAR}, #{item.fileId,jdbcType=VARCHAR}, (#{item.id,jdbcType=VARCHAR}, #{item.bugId,jdbcType=VARCHAR}, #{item.fileId,jdbcType=VARCHAR},
#{item.fileName,jdbcType=VARCHAR}, #{item.size,jdbcType=BIGINT}, #{item.local,jdbcType=BIT}, #{item.fileName,jdbcType=VARCHAR}, #{item.size,jdbcType=BIGINT}, #{item.createUser,jdbcType=VARCHAR},
#{item.createUser,jdbcType=VARCHAR}, #{item.createTime,jdbcType=BIGINT}) #{item.createTime,jdbcType=BIGINT})
</foreach> </foreach>
</insert> </insert>
<insert id="batchInsertSelective" parameterType="map"> <insert id="batchInsertSelective" parameterType="map">
insert into bug_attachment ( insert into bug_local_attachment (
<foreach collection="selective" item="column" separator=","> <foreach collection="selective" item="column" separator=",">
${column.escapedColumnName} ${column.escapedColumnName}
</foreach> </foreach>
@ -290,9 +275,6 @@
<if test="'size'.toString() == column.value"> <if test="'size'.toString() == column.value">
#{item.size,jdbcType=BIGINT} #{item.size,jdbcType=BIGINT}
</if> </if>
<if test="'local'.toString() == column.value">
#{item.local,jdbcType=BIT}
</if>
<if test="'create_user'.toString() == column.value"> <if test="'create_user'.toString() == column.value">
#{item.createUser,jdbcType=VARCHAR} #{item.createUser,jdbcType=VARCHAR}
</if> </if>

View File

@ -53,17 +53,16 @@ CREATE TABLE IF NOT EXISTS bug_follower(
CREATE INDEX idx_follow_id ON bug_follower(user_id); CREATE INDEX idx_follow_id ON bug_follower(user_id);
CREATE TABLE IF NOT EXISTS bug_attachment( CREATE TABLE IF NOT EXISTS bug_local_attachment(
`id` VARCHAR(255) NOT NULL COMMENT 'ID' , `id` VARCHAR(255) NOT NULL COMMENT 'ID' ,
`bug_id` VARCHAR(50) NOT NULL COMMENT '缺陷ID' , `bug_id` VARCHAR(50) NOT NULL COMMENT '缺陷ID' ,
`file_id` VARCHAR(50) NOT NULL COMMENT '文件ID' , `file_id` VARCHAR(50) NOT NULL COMMENT '文件ID' ,
`file_name` VARCHAR(255) NOT NULL COMMENT '文件名称' , `file_name` VARCHAR(255) NOT NULL COMMENT '文件名称' ,
`size` BIGINT NOT NULL COMMENT '文件大小' , `size` BIGINT NOT NULL COMMENT '文件大小' ,
`local` BIT(1) NOT NULL COMMENT '是否本地' , `create_user` VARCHAR(50) NOT NULL COMMENT '创建人' ,
`create_user` VARCHAR(50) NOT NULL COMMENT '创建人' , `create_time` BIGINT NOT NULL COMMENT '创建时间' ,
`create_time` BIGINT NOT NULL COMMENT '创建时间' , PRIMARY KEY (id)
PRIMARY KEY (id) ) COMMENT = '缺陷本地附件';
) COMMENT = '缺陷附件';
CREATE TABLE IF NOT EXISTS bug_comment( CREATE TABLE IF NOT EXISTS bug_comment(
`id` VARCHAR(50) NOT NULL COMMENT 'ID' , `id` VARCHAR(50) NOT NULL COMMENT 'ID' ,

View File

@ -42,19 +42,17 @@ bug_comment.create_user.length_range=评论人长度必须在1-50之间
bug_comment.update_user.not_blank=更新人不能为空 bug_comment.update_user.not_blank=更新人不能为空
bug_comment.update_user.length_range=更新人长度必须在1-50之间 bug_comment.update_user.length_range=更新人长度必须在1-50之间
# bugAttachment # bugLocalAttachment
bug_attachment.id.not_blank=ID不能为空 bug_local_attachment.id.not_blank=ID不能为空
bug_attachment.id.length_range=ID长度必须在1-50之间 bug_local_attachment.id.length_range=ID长度必须在1-50之间
bug_attachment.bug_id.not_blank=缺陷ID不能为空 bug_local_attachment.bug_id.not_blank=缺陷ID不能为空
bug_attachment.bug_id.length_range=缺陷ID长度必须在1-50之间 bug_local_attachment.bug_id.length_range=缺陷ID长度必须在1-50之间
bug_attachment.file_id.not_blank=文件ID不能为空 bug_local_attachment.file_id.not_blank=文件ID不能为空
bug_attachment.file_id.length_range=文件ID长度必须在1-50之间 bug_local_attachment.file_id.length_range=文件ID长度必须在1-50之间
bug_attachment.file_name.not_blank=文件名称不能为空 bug_local_attachment.file_name.not_blank=文件名称不能为空
bug_attachment.file_name.length_range=文件名称长度必须在1-50之间 bug_local_attachment.file_name.length_range=文件名称长度必须在1-50之间
bug_attachment.local.not_blank=是否本地上传不能为空 bug_local_attachment.create_user.not_blank=创建人不能为空
bug_attachment.local.length_range=是否本地上传长度必须在1-50之间 bug_local_attachment.create_user.length_range=创建人长度必须在1-50之间
bug_attachment.create_user.not_blank=创建人不能为空
bug_attachment.create_user.length_range=创建人长度必须在1-50之间
# bugCustomField # bugCustomField
bug_custom_field.bug_id.not_blank=缺陷ID不能为空 bug_custom_field.bug_id.not_blank=缺陷ID不能为空

View File

@ -42,19 +42,17 @@ bug_comment.create_user.length_range=createUser length must be between 1-50
bug_comment.update_user.not_blank=updateUser cannot be empty bug_comment.update_user.not_blank=updateUser cannot be empty
bug_comment.update_user.length_range=updateUser length must be between 1-50 bug_comment.update_user.length_range=updateUser length must be between 1-50
# bugAttachment # bugLocalAttachment
bug_attachment.id.not_blank=id cannot be empty bug_local_attachment.id.not_blank=id cannot be empty
bug_attachment.id.length_range=id length must be between 1-50 bug_local_attachment.id.length_range=id length must be between 1-50
bug_attachment.bug_id.not_blank=bugId cannot be empty bug_local_attachment.bug_id.not_blank=bugId cannot be empty
bug_attachment.bug_id.length_range=bugId length must be between 1-50 bug_local_attachment.bug_id.length_range=bugId length must be between 1-50
bug_attachment.file_id.not_blank=fileId cannot be empty bug_local_attachment.file_id.not_blank=fileId cannot be empty
bug_attachment.file_id.length_range=fileId length must be between 1-50 bug_local_attachment.file_id.length_range=fileId length must be between 1-50
bug_attachment.file_name.not_blank=fileName cannot be empty bug_local_attachment.file_name.not_blank=fileName cannot be empty
bug_attachment.file_name.length_range=fileName length must be between 1-50 bug_local_attachment.file_name.length_range=fileName length must be between 1-50
bug_attachment.local.not_blank=local cannot be empty bug_local_attachment.create_user.not_blank=createUser cannot be empty
bug_attachment.local.length_range=local length must be between 1-50 bug_local_attachment.create_user.length_range=createUser length must be between 1-50
bug_attachment.create_user.not_blank=createUser cannot be empty
bug_attachment.create_user.length_range=createUser length must be between 1-50
# bugCustomField # bugCustomField
bug_custom_field.bug_id.not_blank=bugId cannot be empty bug_custom_field.bug_id.not_blank=bugId cannot be empty

View File

@ -42,19 +42,17 @@ bug_comment.create_user.length_range=评论人长度必须在1-50之间
bug_comment.update_user.not_blank=更新人不能为空 bug_comment.update_user.not_blank=更新人不能为空
bug_comment.update_user.length_range=更新人长度必须在1-50之间 bug_comment.update_user.length_range=更新人长度必须在1-50之间
# bugAttachment # bugLocalAttachment
bug_attachment.id.not_blank=ID不能为空 bug_local_attachment.id.not_blank=ID不能为空
bug_attachment.id.length_range=ID长度必须在1-50之间 bug_local_attachment.id.length_range=ID长度必须在1-50之间
bug_attachment.bug_id.not_blank=缺陷ID不能为空 bug_local_attachment.bug_id.not_blank=缺陷ID不能为空
bug_attachment.bug_id.length_range=缺陷ID长度必须在1-50之间 bug_local_attachment.bug_id.length_range=缺陷ID长度必须在1-50之间
bug_attachment.file_id.not_blank=文件ID不能为空 bug_local_attachment.file_id.not_blank=文件ID不能为空
bug_attachment.file_id.length_range=文件ID长度必须在1-50之间 bug_local_attachment.file_id.length_range=文件ID长度必须在1-50之间
bug_attachment.file_name.not_blank=文件名称不能为空 bug_local_attachment.file_name.not_blank=文件名称不能为空
bug_attachment.file_name.length_range=文件名称长度必须在1-50之间 bug_local_attachment.file_name.length_range=文件名称长度必须在1-50之间
bug_attachment.local.not_blank=是否本地上传不能为空 bug_local_attachment.create_user.not_blank=创建人不能为空
bug_attachment.local.length_range=是否本地上传长度必须在1-50之间 bug_local_attachment.create_user.length_range=创建人长度必须在1-50之间
bug_attachment.create_user.not_blank=创建人不能为空
bug_attachment.create_user.length_range=创建人长度必须在1-50之间
# bugCustomField # bugCustomField
bug_custom_field.bug_id.not_blank=缺陷ID不能为空 bug_custom_field.bug_id.not_blank=缺陷ID不能为空

View File

@ -42,19 +42,17 @@ bug_comment.create_user.length_range=评论人長度必須在1-50之間
bug_comment.update_user.not_blank=更新人不能為空 bug_comment.update_user.not_blank=更新人不能為空
bug_comment.update_user.length_range=更新人長度必須在1-50之間 bug_comment.update_user.length_range=更新人長度必須在1-50之間
# bugAttachment # bugLocalAttachment
bug_attachment.id.not_blank=ID不能為空 bug_local_attachment.id.not_blank=ID不能為空
bug_attachment.id.length_range=ID長度必須在1-50之間 bug_local_attachment.id.length_range=ID長度必須在1-50之間
bug_attachment.bug_id.not_blank=缺陷ID不能為空 bug_local_attachment.bug_id.not_blank=缺陷ID不能為空
bug_attachment.bug_id.length_range=缺陷ID長度必須在1-50之間 bug_local_attachment.bug_id.length_range=缺陷ID長度必須在1-50之間
bug_attachment.file_id.not_blank=文件ID不能為空 bug_local_attachment.file_id.not_blank=文件ID不能為空
bug_attachment.file_id.length_range=文件ID長度必須在1-50之間 bug_local_attachment.file_id.length_range=文件ID長度必須在1-50之間
bug_attachment.file_name.not_blank=文件名称不能為空 bug_local_attachment.file_name.not_blank=文件名称不能為空
bug_attachment.file_name.length_range=文件名称長度必須在1-50之間 bug_local_attachment.file_name.length_range=文件名称長度必須在1-50之間
bug_attachment.local.not_blank=是否本地上傳不能為空 bug_local_attachment.create_user.not_blank=创建人不能為空
bug_attachment.local.length_range=是否本地上傳必須在1-50之間 bug_local_attachment.create_user.length_range=创建人長度必須在1-50之間
bug_attachment.create_user.not_blank=创建人不能為空
bug_attachment.create_user.length_range=创建人長度必須在1-50之間
# bugCustomField # bugCustomField
bug_custom_field.bug_id.not_blank=缺陷ID不能為空 bug_custom_field.bug_id.not_blank=缺陷ID不能為空

View File

@ -60,8 +60,8 @@ public class BugEditRequest {
@Schema(description = "删除的本地附件集合") @Schema(description = "删除的本地附件集合")
private List<String> deleteLocalFileIds; private List<String> deleteLocalFileIds;
@Schema(description = "取消关联附件集合") @Schema(description = "取消关联附件关系ID集合")
private List<String> unLinkFileIds; private List<String> unLinkRefIds;
@Schema(description = "关联附件集合") @Schema(description = "关联附件集合")
private List<String> linkFileIds; private List<String> linkFileIds;

View File

@ -1,20 +0,0 @@
package io.metersphere.bug.dto.request;
import io.metersphere.system.dto.sdk.BasePageRequest;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
@Data
@EqualsAndHashCode(callSuper = false)
public class BugRelateCasePageRequest extends BasePageRequest {
@Schema(description = "所属项目ID", requiredMode = Schema.RequiredMode.REQUIRED)
private String projectId;
@Schema(description = "版本ID")
private String versionId;
@Schema(description = "选中模块ID")
private String selectModuleId;
}

View File

@ -1,18 +0,0 @@
package io.metersphere.bug.dto.request;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.List;
@Data
@EqualsAndHashCode(callSuper = false)
public class BugRelateCaseRequest extends BugRelateCasePageRequest{
@Schema(description = "是否全选", requiredMode = Schema.RequiredMode.REQUIRED)
private boolean selectAll;
@Schema(description = "用例ID勾选列表")
private List<String> includeCaseIds;
}

View File

@ -1,15 +1,15 @@
package io.metersphere.bug.mapper; package io.metersphere.bug.mapper;
import io.metersphere.bug.domain.BugAttachment; import io.metersphere.bug.domain.BugLocalAttachment;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import java.util.List; import java.util.List;
public interface ExtBugAttachmentMapper { public interface ExtBugLocalAttachmentMapper {
/** /**
* 批量插入缺陷附件关系 * 批量插入缺陷附件关系
* @param attachments 缺陷附件集合 * @param attachments 缺陷附件集合
*/ */
void batchInsert(@Param("list") List<BugAttachment> attachments); void batchInsert(@Param("list") List<BugLocalAttachment> attachments);
} }

View File

@ -1,11 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?> <?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"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="io.metersphere.bug.mapper.ExtBugAttachmentMapper"> <mapper namespace="io.metersphere.bug.mapper.ExtBugLocalAttachmentMapper">
<insert id="batchInsert" parameterType="io.metersphere.bug.domain.BugAttachment"> <insert id="batchInsert" parameterType="io.metersphere.bug.domain.BugLocalAttachment">
insert into bug_attachment values insert into bug_local_attachment values
<foreach collection="list" item="attachment" separator=","> <foreach collection="list" item="attachment" separator=",">
(#{attachment.id}, #{attachment.bugId}, #{attachment.fileId}, #{attachment.fileName}, (#{attachment.id}, #{attachment.bugId}, #{attachment.fileId}, #{attachment.fileName},
#{attachment.size}, #{attachment.local}, #{attachment.createUser}, #{attachment.createTime}) #{attachment.size}, #{attachment.createUser}, #{attachment.createTime})
</foreach> </foreach>
</insert> </insert>
</mapper> </mapper>

View File

@ -12,22 +12,23 @@ import io.metersphere.bug.dto.request.BugPageRequest;
import io.metersphere.bug.enums.BugPlatform; import io.metersphere.bug.enums.BugPlatform;
import io.metersphere.bug.mapper.*; import io.metersphere.bug.mapper.*;
import io.metersphere.bug.utils.CustomFieldUtils; import io.metersphere.bug.utils.CustomFieldUtils;
import io.metersphere.project.domain.FileMetadata; import io.metersphere.project.dto.filemanagement.FileLogRecord;
import io.metersphere.project.domain.FileMetadataExample; import io.metersphere.project.service.FileAssociationService;
import io.metersphere.project.mapper.FileMetadataMapper;
import io.metersphere.project.service.FileService; import io.metersphere.project.service.FileService;
import io.metersphere.project.service.ProjectTemplateService; import io.metersphere.project.service.ProjectTemplateService;
import io.metersphere.sdk.constants.ApplicationNumScope; import io.metersphere.sdk.constants.ApplicationNumScope;
import io.metersphere.sdk.constants.HttpMethodConstants;
import io.metersphere.sdk.constants.StorageType; import io.metersphere.sdk.constants.StorageType;
import io.metersphere.sdk.constants.TemplateScene; import io.metersphere.sdk.constants.TemplateScene;
import io.metersphere.sdk.exception.MSException; import io.metersphere.sdk.exception.MSException;
import io.metersphere.sdk.util.BeanUtils; import io.metersphere.sdk.util.BeanUtils;
import io.metersphere.sdk.util.MsFileUtils; import io.metersphere.sdk.util.FileAssociationSourceUtil;
import io.metersphere.sdk.util.Translator; import io.metersphere.sdk.util.Translator;
import io.metersphere.system.domain.Template; import io.metersphere.system.domain.Template;
import io.metersphere.system.dto.sdk.OptionDTO; import io.metersphere.system.dto.sdk.OptionDTO;
import io.metersphere.system.dto.sdk.TemplateDTO; import io.metersphere.system.dto.sdk.TemplateDTO;
import io.metersphere.system.file.FileRequest; import io.metersphere.system.file.FileRequest;
import io.metersphere.system.log.constants.OperationLogModule;
import io.metersphere.system.mapper.BaseUserMapper; import io.metersphere.system.mapper.BaseUserMapper;
import io.metersphere.system.mapper.TemplateMapper; import io.metersphere.system.mapper.TemplateMapper;
import io.metersphere.system.service.BaseTemplateService; import io.metersphere.system.service.BaseTemplateService;
@ -78,11 +79,11 @@ public class BugService {
@Resource @Resource
private ExtBugRelateCaseMapper extBugRelateCaseMapper; private ExtBugRelateCaseMapper extBugRelateCaseMapper;
@Resource @Resource
private FileMetadataMapper fileMetadataMapper; private FileAssociationService fileAssociationService;
@Resource @Resource
private BugAttachmentMapper bugAttachmentMapper; private BugLocalAttachmentMapper bugLocalAttachmentMapper;
@Resource @Resource
private ExtBugAttachmentMapper extBugAttachmentMapper; private ExtBugLocalAttachmentMapper extBugLocalAttachmentMapper;
@Resource @Resource
private FileService fileService; private FileService fileService;
@Resource @Resource
@ -90,6 +91,11 @@ public class BugService {
@Resource @Resource
private BugFollowerMapper bugFollowerMapper; private BugFollowerMapper bugFollowerMapper;
public static final String ADD_BUG_FILE_LOG_URL = "/bug/add";
public static final String UPDATE_BUG_FILE_LOG_URL = "/bug/update";
public static final String UPLOAD_SOURCE_DIR = "/project";
public static final String UPLOAD_APP_DIR = "/bug";
/** /**
* 缺陷列表查询 * 缺陷列表查询
* *
@ -144,7 +150,7 @@ public class BugService {
// 自定义字段 // 自定义字段
handleAndSaveCustomFields(request, false, false); handleAndSaveCustomFields(request, false, false);
// 附件 // 附件
handleAndSaveAttachments(request, files, currentUser); handleAndSaveAttachments(request, files, currentUser, ADD_BUG_FILE_LOG_URL);
} }
/** /**
@ -166,7 +172,7 @@ public class BugService {
// 自定义字段 // 自定义字段
handleAndSaveCustomFields(request, true, false); handleAndSaveCustomFields(request, true, false);
// 附件 // 附件
handleAndSaveAttachments(request, files, currentUser); handleAndSaveAttachments(request, files, currentUser, UPDATE_BUG_FILE_LOG_URL);
} }
/** /**
@ -360,7 +366,6 @@ public class BugService {
// } // }
if (StringUtils.isEmpty(bug.getId())) { if (StringUtils.isEmpty(bug.getId())) {
bug.setId(IDGenerator.nextStr()); bug.setId(IDGenerator.nextStr());
// TODO: 业务ID生成规则, 暂保留, 后续补充
bug.setNum(Long.valueOf(NumGenerator.nextNum(request.getProjectId(), ApplicationNumScope.BUG_MANAGEMENT)).intValue()); bug.setNum(Long.valueOf(NumGenerator.nextNum(request.getProjectId(), ApplicationNumScope.BUG_MANAGEMENT)).intValue());
bug.setHandleUsers(request.getHandleUser()); bug.setHandleUsers(request.getHandleUser());
bug.setCreateUser(currentUser); bug.setCreateUser(currentUser);
@ -473,89 +478,62 @@ public class BugService {
* @param request 请求参数 * @param request 请求参数
* @param files 上传附件集合 * @param files 上传附件集合
*/ */
private void handleAndSaveAttachments(BugEditRequest request, List<MultipartFile> files, String currentUser) { private void handleAndSaveAttachments(BugEditRequest request, List<MultipartFile> files, String currentUser, String fileLogUrl) {
Map<String, MultipartFile> uploadMinioFiles = new HashMap<>(16); /*
List<BugAttachment> addFiles = new ArrayList<>(); * 附件处理逻辑
// 处理删除的本地上传附件及取消关联的附件 * 1. 先处理删除, 及取消关联的附件
List<String> deleteIds = new ArrayList<>(); * 2. 再处理新上传的, 新关联的附件
*/
if (CollectionUtils.isNotEmpty(request.getDeleteLocalFileIds())) { if (CollectionUtils.isNotEmpty(request.getDeleteLocalFileIds())) {
deleteIds.addAll(request.getDeleteLocalFileIds()); // 删除本地上传的附件, BUG_LOCAL_ATTACHMENT表
request.getDeleteLocalFileIds().forEach(deleteFileId -> { request.getDeleteLocalFileIds().forEach(deleteFileId -> {
FileRequest fileRequest = new FileRequest(); FileRequest fileRequest = buildBugFileRequest(request.getProjectId(), deleteFileId, null);
fileRequest.setProjectId(request.getProjectId());
fileRequest.setFileName(deleteFileId);
fileRequest.setStorage(StorageType.MINIO.name());
try { try {
fileService.deleteFile(fileRequest); fileService.deleteFile(fileRequest);
} catch (Exception e) { } catch (Exception e) {
throw new MSException(Translator.get("bug_attachment_delete_error")); throw new MSException(Translator.get("bug_attachment_delete_error"));
} }
}); });
BugLocalAttachmentExample example = new BugLocalAttachmentExample();
example.createCriteria().andBugIdEqualTo(request.getId()).andFileIdIn(request.getDeleteLocalFileIds());
bugLocalAttachmentMapper.deleteByExample(example);
} }
if (CollectionUtils.isNotEmpty(request.getUnLinkFileIds())) { if (CollectionUtils.isNotEmpty(request.getUnLinkRefIds())) {
deleteIds.addAll(request.getUnLinkFileIds()); // 取消关联的附件, FILE_ASSOCIATION表
} fileAssociationService.deleteBySourceId(request.getUnLinkRefIds(), createFileLogRecord(fileLogUrl, currentUser, request.getProjectId()));
if (CollectionUtils.isNotEmpty(deleteIds)) {
BugAttachmentExample example = new BugAttachmentExample();
example.createCriteria().andBugIdEqualTo(request.getId()).andFileIdIn(deleteIds);
bugAttachmentMapper.deleteByExample(example);
// TODO: 如果是第三方平台, 需调用平台插件同步删除附件
} }
// 新本地上传的附件 // 新本地上传的附件
List<BugLocalAttachment> addFiles = new ArrayList<>();
Map<String, MultipartFile> uploadMinioFiles = new HashMap<>(16);
if (CollectionUtils.isNotEmpty(files)) { if (CollectionUtils.isNotEmpty(files)) {
files.forEach(file -> { files.forEach(file -> {
BugAttachment bugAttachment = new BugAttachment(); BugLocalAttachment bugAttachment = new BugLocalAttachment();
bugAttachment.setId(IDGenerator.nextStr()); bugAttachment.setId(IDGenerator.nextStr());
bugAttachment.setBugId(request.getId()); bugAttachment.setBugId(request.getId());
bugAttachment.setFileId(IDGenerator.nextStr()); bugAttachment.setFileId(IDGenerator.nextStr());
bugAttachment.setFileName(file.getOriginalFilename()); bugAttachment.setFileName(file.getOriginalFilename());
bugAttachment.setSize(file.getSize()); bugAttachment.setSize(file.getSize());
bugAttachment.setLocal(true);
bugAttachment.setCreateTime(System.currentTimeMillis()); bugAttachment.setCreateTime(System.currentTimeMillis());
bugAttachment.setCreateUser(currentUser); bugAttachment.setCreateUser(currentUser);
addFiles.add(bugAttachment); addFiles.add(bugAttachment);
uploadMinioFiles.put(bugAttachment.getFileId(), file); uploadMinioFiles.put(bugAttachment.getFileId(), file);
}); });
} extBugLocalAttachmentMapper.batchInsert(addFiles);
// 新关联的附件 uploadMinioFiles.forEach((fileId, file) -> {
List<String> linkIds = request.getLinkFileIds(); FileRequest fileRequest = buildBugFileRequest(request.getProjectId(), fileId, file.getOriginalFilename());
if (CollectionUtils.isNotEmpty(linkIds)) { try {
FileMetadataExample example = new FileMetadataExample(); fileService.upload(file, fileRequest);
example.createCriteria().andIdIn(linkIds); } catch (Exception e) {
List<FileMetadata> linkFiles = fileMetadataMapper.selectByExample(example); throw new MSException(Translator.get("bug_attachment_upload_error"));
Map<String, FileMetadata> linkFileMap = linkFiles.stream().collect(Collectors.toMap(FileMetadata::getId, v -> v));
linkIds.forEach(fileId -> {
FileMetadata fileMetadata = linkFileMap.get(fileId);
if (fileMetadata == null) {
return;
} }
BugAttachment bugAttachment = new BugAttachment();
bugAttachment.setId(IDGenerator.nextStr());
bugAttachment.setBugId(request.getId());
bugAttachment.setFileId(fileId);
bugAttachment.setFileName(fileMetadata.getName());
bugAttachment.setSize(fileMetadata.getSize());
bugAttachment.setLocal(false);
bugAttachment.setCreateTime(System.currentTimeMillis());
bugAttachment.setCreateUser(currentUser);
addFiles.add(bugAttachment);
}); });
} }
if (CollectionUtils.isNotEmpty(addFiles)) { // 新关联的附件
extBugAttachmentMapper.batchInsert(addFiles); if (CollectionUtils.isNotEmpty(request.getLinkFileIds())) {
fileAssociationService.association(request.getId(), FileAssociationSourceUtil.SOURCE_TYPE_BUG, request.getLinkFileIds(), false,
createFileLogRecord(fileLogUrl, currentUser, request.getProjectId()));
} }
// TODO: 如果是第三方平台, 需调用平台插件同步上传附件
uploadMinioFiles.forEach((fileId, file) -> {
FileRequest fileRequest = new FileRequest();
fileRequest.setFileName(file.getOriginalFilename());
fileRequest.setResourceId("/" + MsFileUtils.BUG_MANAGEMENT_DIR + "/" + request.getProjectId() + "/" + fileId);
fileRequest.setStorage(StorageType.MINIO.name());
try {
fileService.upload(file, fileRequest);
} catch (Exception e) {
throw new MSException(Translator.get("bug_attachment_upload_error"));
}
});
} }
// /** // /**
@ -653,4 +631,24 @@ public class BugService {
// } // }
// return template; // return template;
// } // }
private FileLogRecord createFileLogRecord(String logUrl, String operator, String projectId){
return FileLogRecord.builder()
.logModule(OperationLogModule.BUG_MANAGEMENT)
.requestMethod(HttpMethodConstants.POST.name())
.requestUrl(logUrl)
.operator(operator)
.projectId(projectId)
.build();
}
private FileRequest buildBugFileRequest(String projectId, String resourceId, String fileName) {
FileRequest fileRequest = new FileRequest();
fileRequest.setFolder(UPLOAD_SOURCE_DIR + "/" + projectId + UPLOAD_APP_DIR + "/" + resourceId);
fileRequest.setProjectId(projectId);
fileRequest.setResourceId(resourceId);
fileRequest.setFileName(StringUtils.isEmpty(fileName) ? null : fileName);
fileRequest.setStorage(StorageType.MINIO.name());
return fileRequest;
}
} }

View File

@ -74,7 +74,7 @@
<!-- <table tableName="bug_content" />--> <!-- <table tableName="bug_content" />-->
<!-- <table tableName="bug_follower" />--> <!-- <table tableName="bug_follower" />-->
<!-- <table tableName="bug_comment" />--> <!-- <table tableName="bug_comment" />-->
<!-- <table tableName="bug_attachment" />--> <table tableName="bug_local_attachment" />
<!-- <table tableName="bug_custom_field" />--> <!-- <table tableName="bug_custom_field" />-->
<!-- <table tableName="bug_relation_case" />--> <!-- <table tableName="bug_relation_case" />-->
<!-- <table tableName="bug_history" />--> <!-- <table tableName="bug_history" />-->

View File

@ -440,13 +440,13 @@ public class BugControllerTests extends BaseTest {
request.setHandleUser("admin"); request.setHandleUser("admin");
request.setTemplateId("default-bug-template"); request.setTemplateId("default-bug-template");
request.setStatus("prepare"); request.setStatus("prepare");
request.setLinkFileIds(List.of("default-bug-file-id-1", "default-bug-file-id-3")); request.setLinkFileIds(List.of("default-bug-file-id-1"));
Map<String, String> customFieldMap = new HashMap<>(); Map<String, String> customFieldMap = new HashMap<>();
customFieldMap.put("custom-field", "oasis"); customFieldMap.put("custom-field", "oasis");
customFieldMap.put("test_field", JSON.toJSONString(List.of("test"))); customFieldMap.put("test_field", JSON.toJSONString(List.of("test")));
if (isUpdate) { if (isUpdate) {
request.setId("default-bug-id"); request.setId("default-bug-id");
request.setUnLinkFileIds(List.of("default-bug-file-id-1")); request.setUnLinkRefIds(List.of("default-bug-file-id-1"));
request.setDeleteLocalFileIds(List.of("default-bug-file-id")); request.setDeleteLocalFileIds(List.of("default-bug-file-id"));
request.setLinkFileIds(List.of("default-bug-file-id-2")); request.setLinkFileIds(List.of("default-bug-file-id-2"));
} }

View File

@ -102,4 +102,6 @@ public class OperationLogModule {
public static final String API_DEBUG = "API_DEBUG"; public static final String API_DEBUG = "API_DEBUG";
//接口管理-环境 //接口管理-环境
public static final String API_DEFINITION_ENVIRONMENT = "API_DEFINITION_ENVIRONMENT"; public static final String API_DEFINITION_ENVIRONMENT = "API_DEFINITION_ENVIRONMENT";
// 缺陷管理
public static final String BUG_MANAGEMENT = "BUG_MANAGEMENT";
} }