From bccc9b8e1244efeef1ed515f88aff0d07b40239e Mon Sep 17 00:00:00 2001
From: OTTO <731554297@qq.com>
Date: Tue, 3 Dec 2024 14:44:04 +0800
Subject: [PATCH] =?UTF-8?q?feat(=E9=A1=B9=E7=9B=AE=E7=AE=A1=E7=90=86?=
=?UTF-8?q?=E4=BA=A7=E5=93=81=E9=9C=80=E6=B1=82=E9=87=8D=E6=9E=84):=20?=
=?UTF-8?q?=E5=AE=8C=E5=96=84=E4=BA=A7=E5=93=81=E4=B8=AD=E7=9A=84=E7=94=A8?=
=?UTF-8?q?=E6=88=B7=E9=9C=80=E6=B1=82=E5=8A=9F=E8=83=BD=E5=BC=80=E5=8F=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
1. 增加用户需求和操作记录的关联查询操作,查询需求最新的评审情况
2. 查询用户需求列表时返回评审人、评审时间和评审意见
3. 修正部分评审记录异常的问题
Signed-off-by: OTTO <731554297@qq.com>
---
.../product/domain/PmsProductRequirement.java | 7 +++
.../domain/enums/ProductReqOperationType.java | 2 +-
.../product/domain/vo/ProductReqReviewVo.java | 24 +++++++----
.../domain/vo/ProductUserReqDataVo.java | 10 +++++
.../PmsProductRequirementServiceImpl.java | 26 +++++++----
.../pms/PmsProductRequirementMapper.xml | 43 ++++++++++++++++++-
6 files changed, 92 insertions(+), 20 deletions(-)
diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java
index b6d812017..864708cfc 100644
--- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java
+++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/PmsProductRequirement.java
@@ -151,6 +151,13 @@ public class PmsProductRequirement extends BaseEntity
@ApiModelProperty(value = "需求标识")
private String identifier;
+ @ApiModelProperty(value = "评审时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date reviewTime;
+
+ @ApiModelProperty(value = "评审内容")
+ private String reviewContent;
+
public PmsProductRequirementDataVo toPmsProductRequirementDataVo(){
PmsProductRequirementDataVo target = new PmsProductRequirementDataVo();
BeanUtils.copyProperties(this, target);
diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java
index 980646eb8..1ea045364 100644
--- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java
+++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/enums/ProductReqOperationType.java
@@ -12,7 +12,7 @@ public enum ProductReqOperationType {
CONTENT_MODIFY("contentModify", "内容修改"),
REVIEW_USER_REQ("reviewUserReq", "用户需求评审"),
ACTIVE_PLAN("activePlan", "纳入计划"),
- REVIEW_REQ_SPECS("reviewUserReq", "需求规格评审");
+ REVIEW_REQ_SPECS("reviewReqSpecs", "需求规格评审");
private final String key;
private final String name;
diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java
index 5e9a38830..860d4477f 100644
--- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java
+++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductReqReviewVo.java
@@ -1,5 +1,6 @@
package com.microservices.pms.product.domain.vo;
+import com.alibaba.fastjson2.JSONObject;
import com.microservices.pms.product.domain.PmsProductReqOperationRecord;
import com.microservices.pms.product.domain.enums.ProductReqOperationType;
import io.swagger.annotations.ApiModel;
@@ -31,29 +32,36 @@ public class ProductReqReviewVo {
@NotNull
private Date reviewTime;
+ @ApiModelProperty(value = "评审人", required = true)
+ @NotNull
+ private String reviewUser;
+
@ApiModelProperty(value = "评审意见", required = true)
@NotNull
private String reviewContent;
public PmsProductReqOperationRecord toUserReqRecord(String operator) {
- PmsProductReqOperationRecord record = new PmsProductReqOperationRecord();
- record.setProductRequirementId(id);
+ PmsProductReqOperationRecord record = toRecord(operator);
record.setType(ProductReqOperationType.REVIEW_USER_REQ.getKey());
- record.setOperation(reviewStatus);
- record.setOperator(operator);
- record.setOperatingTime(reviewTime);
- record.setContent(reviewContent);
return record;
}
public PmsProductReqOperationRecord toReqSpecsRecord(String operator) {
+ PmsProductReqOperationRecord record = toRecord(operator);
+ record.setType(ProductReqOperationType.REVIEW_REQ_SPECS.getKey());
+ return record;
+ }
+
+ private PmsProductReqOperationRecord toRecord(String operator) {
PmsProductReqOperationRecord record = new PmsProductReqOperationRecord();
record.setProductRequirementId(id);
- record.setType(ProductReqOperationType.REVIEW_REQ_SPECS.getKey());
record.setOperation(reviewStatus);
record.setOperator(operator);
record.setOperatingTime(reviewTime);
- record.setContent(reviewContent);
+ JSONObject contentJson = new JSONObject();
+ contentJson.put("reviewUser", reviewUser);
+ contentJson.put("reviewContent", reviewContent);
+ record.setContent(contentJson.toJSONString());
return record;
}
}
diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java
index c18c73c26..51e6be62a 100644
--- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java
+++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/domain/vo/ProductUserReqDataVo.java
@@ -40,6 +40,16 @@ public class ProductUserReqDataVo {
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
+ @ApiModelProperty(value = "评审时间")
+ @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+ private Date reviewTime;
+
+ @ApiModelProperty(value = "评审人")
+ private String reviewUser;
+
+ @ApiModelProperty(value = "评审意见")
+ private String reviewContent;
+
public ProductUserReqDetailVo toProductReqUserDetailVo() {
ProductUserReqDetailVo target = new ProductUserReqDetailVo();
BeanUtils.copyProperties(this, target);
diff --git a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java
index 5f30e456a..dc38b0301 100644
--- a/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java
+++ b/microservices-modules/microservices-modules-pms/src/main/java/com/microservices/pms/product/service/impl/PmsProductRequirementServiceImpl.java
@@ -1,5 +1,6 @@
package com.microservices.pms.product.service.impl;
+import com.alibaba.fastjson2.JSON;
import com.alibaba.fastjson2.JSONObject;
import com.microservices.common.core.constant.SecurityConstants;
import com.microservices.common.core.exception.NotFoundException;
@@ -177,7 +178,12 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
ProductUserReqDataVo productUserReqDataVo = pmsProductRequirement.toProductUserReqDataVo();
// 设置状态
productUserReqDataVo.setStatus(ProductReqStatus.getTypeByKey(pmsProductRequirement.getStatus()));
-
+ if (StringUtils.isNotEmpty(pmsProductRequirement.getReviewContent())
+ && JSON.isValid(pmsProductRequirement.getReviewContent())) {
+ JSONObject reviewContentJson = JSONObject.parseObject(pmsProductRequirement.getReviewContent());
+ productUserReqDataVo.setReviewUser(reviewContentJson.getString("reviewUser"));
+ productUserReqDataVo.setReviewContent(reviewContentJson.getString("reviewContent"));
+ }
return productUserReqDataVo;
}
@@ -354,18 +360,18 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
if (!ProductReqStatus.PENDING_REVIEW_USER_REQ.getKey().equals(userReq.getStatus())) {
throw new ServiceException("只有待审核状态的用户需求才能进行审核");
}
- PmsProductReqOperationRecord pmsProductReqOperationRecord
- = productReqReviewVo.toUserReqRecord(SecurityUtils.getUsername());
+
if (ProductReqReviewStatus.PASS.getKey().equals(productReqReviewVo.getReviewStatus())) {
userReq.setStatus(ProductReqStatus.REVIEWED_USER_REQ.getKey());
- userReqToReqSpecs(userReq, pmsProductReqOperationRecord);
+ userReqToReqSpecs(userReq, productReqReviewVo.toUserReqRecord(SecurityUtils.getUsername()));
} else if (ProductReqReviewStatus.REJECTED.getKey().equals(productReqReviewVo.getReviewStatus())) {
userReq.setStatus(ProductReqStatus.REJECTED_USER_REQ.getKey());
} else {
throw new ServiceException("请选择正确的审核状态");
}
// 记录评审意见
- pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord(pmsProductReqOperationRecord);
+ pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord(
+ productReqReviewVo.toUserReqRecord(SecurityUtils.getUsername()));
return updateRequirement(userReq, userReq.getPmsProductIdentifier());
}
@@ -378,8 +384,6 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
&& !ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(reqSpecs.getStatus())) {
throw new ServiceException("只有待审核和变更中状态的需求规格才能进行审核");
}
- PmsProductReqOperationRecord pmsProductReqOperationRecord
- = productReqReviewVo.toReqSpecsRecord(SecurityUtils.getUsername());
if (ProductReqReviewStatus.PASS.getKey().equals(productReqReviewVo.getReviewStatus())) {
if (ProductReqStatus.CHANGING_REQ_SPECS.getKey().equals(reqSpecs.getStatus())) {
PmsProductRequirement fromReqSpecs = selectPmsProductRequirementById(reqSpecs.getFromId(), true);
@@ -403,8 +407,10 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
pmsJournalsService.updateJournalsIdByTypeAndOldId(
PmsConstants.JOURNAL_TYPE_PRODUCT_REQUIREMENT, reqSpecs.getId(), fromReqSpecs.getId());
// 原需规记录评审意见
- pmsProductReqOperationRecord.setId(fromReqSpecs.getId());
- pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord(pmsProductReqOperationRecord);
+ PmsProductReqOperationRecord oldReqSpecsRecord
+ = productReqReviewVo.toReqSpecsRecord(SecurityUtils.getUsername());
+ oldReqSpecsRecord.setId(fromReqSpecs.getId());
+ pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord(oldReqSpecsRecord);
} else {
reqSpecs.setStatus(ProductReqStatus.REJECTED_REQ_SPECS.getKey());
}
@@ -412,6 +418,8 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
throw new ServiceException("请选择正确的审核状态");
}
// 记录评审意见
+ PmsProductReqOperationRecord pmsProductReqOperationRecord
+ = productReqReviewVo.toReqSpecsRecord(SecurityUtils.getUsername());
pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord(pmsProductReqOperationRecord);
return updateRequirement(reqSpecs, reqSpecs.getPmsProductIdentifier());
}
diff --git a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml
index aa5b76378..8810e4679 100644
--- a/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml
+++ b/microservices-modules/microservices-modules-pms/src/main/resources/mapper/pms/PmsProductRequirementMapper.xml
@@ -38,7 +38,7 @@
select id,
title,
`index`,
- status,
+ `status`,
priority_id,
pms_product_module_id,
pms_product_plan_id,
@@ -65,6 +65,45 @@
from pms_product_requirement
+
+
+ select ppr.id,
+ ppr.title,
+ ppr.`index`,
+ ppr.`status`,
+ ppr.priority_id,
+ ppr.pms_product_module_id,
+ ppr.pms_product_plan_id,
+ ppr.pms_product_identifier,
+ ppr.content,
+ ppr.tag_ids,
+ ppr.start_time,
+ ppr.end_time,
+ ppr.file_identifiers,
+ ppr.sort,
+ ppr.update_time,
+ ppr.update_by,
+ ppr.create_time,
+ ppr.create_by,
+ ppr.del_flag,
+ ppr.requirement_assignee_gitlink_ids,
+ ppr.pms_project_id,
+ ppr.from_id,
+ ppr.project_req_id,
+ ppr.type,
+ ppr.source_user,
+ ppr.source_company,
+ ppr.identifier,
+ record.reviewTime,
+ record.content as reviewContent
+ from pms_product_requirement as ppr
+ left join (select product_requirement_id, MAX(operating_time) as reviewTime, content
+ from pms_product_req_operation_record
+ where type = 'reviewUserReq'
+ group by product_requirement_id, content) as record
+ on record.product_requirement_id = ppr.id
+
+