fix(Bug修复): 修复产品标识由用户自定义后可能在不同组织下存在相同产品标识的问题

1. 新增字段:自定义标识,用户输入的自定义标识填充到该字段中,原产品标识还是自动生成
2. 需求规格标识根据自定义标识来生成

Signed-off-by: OTTO <731554297@qq.com>
This commit is contained in:
OTTO 2025-01-08 14:34:37 +08:00
parent 24c1bfedba
commit 33ffe1bfb4
6 changed files with 29 additions and 21 deletions

View File

@ -66,16 +66,13 @@ public class PmsProduct extends BaseEntity
/** 删除标志0代表存在 2代表删除 */
private String delFlag;
/** 预留字段1 */
@ApiModelProperty(value = "自定义标识")
private String customIdentifier;
@ApiModelProperty(value = "预留字段1")
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private String reservedField1;
/** 预留字段2 */
@ApiModelProperty(value = "预留字段2")
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private String reservedField2;
public PmsProductDataVo toPmsProductDataVo() {
PmsProductDataVo target = new PmsProductDataVo();

View File

@ -42,10 +42,10 @@ public class PmsProductInputVo
@ApiModelProperty(value = "关联企业标识", hidden = true)
private String pmsEnterpriseIdentifier;
@ApiModelProperty(value = "产品标识", required = true)
@ApiModelProperty(value = "产品自定义标识", required = true)
@NotNull
@Size(max = 50, message = "长度需要小于50")
private String productIdentifier;
private String customIdentifier;
public PmsProduct toPmsProduct(String pmsEnterpriseIdentifier) {
PmsProduct target = new PmsProduct();

View File

@ -91,4 +91,6 @@ public interface PmsProductMapper
Integer selectPmsProductCount(PmsProductSearchVo pmsProductSearchVo);
Integer selectPmsProductByIdentifierCount(@Param("identifier") String identifier, @Param("pmsEnterpriseIdentifier") String pmsEnterpriseIdentifier);
Integer selectPmsProductByCustomIdentifierCount(@Param("customIdentifier") String customIdentifier, @Param("enterpriseIdentifier") String enterpriseIdentifier);
}

View File

@ -372,7 +372,8 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
private void userReqToReqSpecs(PmsProductRequirement userReq, PmsProductReqOperationRecord record) {
PmsProductRequirement reqSpecs =
userReq.userReqToReqSpecs();
reqSpecs.setIdentifier(genReqSpecsIdentifier(userReq.getPmsProductIdentifier(), userReq.getTitle(), null));
PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(userReq.getPmsProductIdentifier());
reqSpecs.setIdentifier(genReqSpecsIdentifier(pmsProduct.getCustomIdentifier(), userReq.getTitle(), null));
reqSpecs.setCreateAndUpdate(SecurityUtils.getUsername());
pmsProductRequirementMapper.insertPmsProductRequirement(reqSpecs);
record.setProductRequirementId(reqSpecs.getId());
@ -434,17 +435,17 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
return toProductReqSpecsDetailVo(pmsProductRequirement);
}
private String genReqSpecsIdentifier(String productIdentifier, String reqTitle, String oldIdentifier) {
private String genReqSpecsIdentifier(String customIdentifier, String reqTitle, String oldIdentifier) {
// 去掉标题中特殊字符
String regEx = "\\pP|\\pS|\\s+";
reqTitle = Pattern.compile(regEx).matcher(reqTitle).replaceAll("").trim();
String reqTitleIdentifier = PinYinStringUtils.toFirstChar(reqTitle).toUpperCase();
String identifier = productIdentifier + "-" + reqTitleIdentifier;
String identifier = customIdentifier + "-" + reqTitleIdentifier;
if (!identifier.equals(oldIdentifier)) {
Integer count = pmsProductRequirementMapper.selectReqSpecsCountByIdentifier(identifier);
int nameCount = 1;
while (count > 0) {
identifier = productIdentifier + "-" + reqTitleIdentifier + "-" + nameCount;
identifier = customIdentifier + "-" + reqTitleIdentifier + "-" + nameCount;
count = pmsProductRequirementMapper.selectReqSpecsCountByIdentifier(identifier);
nameCount++;
}
@ -464,7 +465,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
checkReqSpecsParameter(pmsProductRequirement, pmsProduct, null);
// 生成需求唯一标识
pmsProductRequirement.setIdentifier(genReqSpecsIdentifier(pmsProduct.getProductIdentifier(), productReqSpecsInputVo.getTitle(), null));
pmsProductRequirement.setIdentifier(genReqSpecsIdentifier(pmsProduct.getCustomIdentifier(), productReqSpecsInputVo.getTitle(), null));
// 设置默认需求状态
pmsProductRequirement.setStatus(ProductReqStatus.PENDING_REVIEW_REQ_SPECS.getKey());

View File

@ -116,10 +116,11 @@ public class PmsProductServiceImpl implements IPmsProductService
@Override
public String insertPmsProduct(PmsProduct pmsProduct) {
PmsEnterprise pmsEnterprise = pmsEnterpriseService.selectPmsEnterpriseByIdentifier(pmsProduct.getPmsEnterpriseIdentifier());
pmsProduct.setProductIdentifier(genProductIdentifier());
checkNameDuplicates(pmsProduct.getProductName(), pmsProduct.getPmsEnterpriseIdentifier());
Integer count = pmsProductMapper.selectPmsProductByIdentifierCount(pmsProduct.getProductIdentifier(), pmsEnterprise.getEnterpriseIdentifier());
Integer count = pmsProductMapper.selectPmsProductByCustomIdentifierCount(pmsProduct.getCustomIdentifier(), pmsEnterprise.getEnterpriseIdentifier());
if (count > 0) {
throw new ServiceException("该产品标识在当前企业下已存在(产品标识[%s])", pmsProduct.getProductIdentifier());
throw new ServiceException("该产品自定义标识在当前企业下已存在(产品自定义标识[%s])", pmsProduct.getCustomIdentifier());
}
pmsProduct.setPmsEnterpriseId(pmsEnterprise.getId());
String currentUsername=SecurityUtils.getUsername();

View File

@ -20,7 +20,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="createBy" column="create_by" />
<result property="delFlag" column="del_flag" />
<result property="reservedField1" column="reserved_field_1" />
<result property="reservedField2" column="reserved_field_2" />
<result property="customIdentifier" column="custom_identifier"/>
</resultMap>
<sql id="selectPmsProductVo">
@ -39,7 +39,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
create_by,
del_flag,
reserved_field_1,
reserved_field_2
custom_identifier
from pms_product
</sql>
@ -59,7 +59,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
ppd.create_by,
ppd.del_flag,
ppd.reserved_field_1,
ppd.reserved_field_2
ppd.custom_identifier
from pms_product ppd
left join pms_enterprise as pe on ppd.pms_enterprise_id = pe.id
</sql>
@ -116,6 +116,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
where ppd.product_identifier = #{identifier}
and pe.enterprise_identifier = #{pmsEnterpriseIdentifier}
</select>
<select id="selectPmsProductByCustomIdentifierCount" resultType="java.lang.Integer">
select count(0)
from pms_product ppd
left join pms_enterprise as pe on ppd.pms_enterprise_id = pe.id
where ppd.custom_identifier = #{customIdentifier}
and pe.enterprise_identifier = #{enterpriseIdentifier}
</select>
<insert id="insertPmsProduct" parameterType="PmsProduct" useGeneratedKeys="true" keyProperty="id">
insert into pms_product
@ -136,7 +143,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="createBy != null">create_by,</if>
<if test="delFlag != null">del_flag,</if>
<if test="reservedField1 != null">reserved_field_1,</if>
<if test="reservedField2 != null">reserved_field_2,</if>
<if test="customIdentifier != null">custom_identifier,</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="productName != null and productName != ''">#{productName},</if>
@ -155,7 +162,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="createBy != null">#{createBy},</if>
<if test="delFlag != null">#{delFlag},</if>
<if test="reservedField1 != null">#{reservedField1},</if>
<if test="reservedField2 != null">#{reservedField2},</if>
<if test="customIdentifier != null">#{customIdentifier},</if>
</trim>
</insert>
@ -178,7 +185,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="createBy != null">create_by = #{createBy},</if>
<if test="delFlag != null">del_flag = #{delFlag},</if>
<if test="reservedField1 != null">reserved_field_1 = #{reservedField1},</if>
<if test="reservedField2 != null">reserved_field_2 = #{reservedField2},</if>
<if test="customIdentifier != null">custom_identifier = #{customIdentifier},</if>
</trim>
where id = #{id}
</update>