feat(项目管理产品需求重构): 完善产品需求规格逻辑

更新需求时不需要检查需求优先级

Signed-off-by: OTTO <731554297@qq.com>
This commit is contained in:
OTTO 2024-12-20 14:04:31 +08:00
parent 9a4e79098c
commit ec209cb0e0
3 changed files with 23 additions and 113 deletions

View File

@ -160,7 +160,7 @@ public class PmsCommonAsyncServiceImpl implements IPmsCommonAsyncService {
List<String> tagIds = new ArrayList<>(Arrays.asList(tagIdsStr.split(",")));
tagIds.remove(tagIdStr);
pmsProductRequirement.setTags(String.join(",", tagIds));
pmsProductRequirementService.updatePmsProductRequirement(pmsProductRequirement);
pmsProductRequirementService.updateRequirement(pmsProductRequirement);
}
});
}

View File

@ -26,14 +26,6 @@ public interface IPmsProductRequirementService
*/
public PmsProductRequirement selectPmsProductRequirementById(Long id, boolean checkRole);
/**
* 修改产品需求
*
* @param pmsProductRequirement 产品需求
* @return 结果
*/
public int updatePmsProductRequirement(PmsProductRequirement pmsProductRequirement);
/**
* 更新产品需求变更
*
@ -142,4 +134,6 @@ public interface IPmsProductRequirementService
List<PmsProject> selectReqSpecsProjectList(String productIdentifier);
int batchUpdatePmsProductRequirement(JSONObject pmsProductRequirementBatchUpdateVo);
int updateRequirement(PmsProductRequirement pmsProductRequirement);
}

View File

@ -201,13 +201,6 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
pmsCommonService.getAllFileByFileIdentifiers(pmsProductRequirement.getFileIdentifiers());
}
private int updateRequirement(PmsProductRequirement pmsProductRequirement, String productIdentifier) {
pmsProductRequirement.setUpdateBy(SecurityUtils.getUsername());
pmsProductRequirement.setUpdateTime(DateUtils.getNowDate());
pmsProductService.updatePmsProductChange(productIdentifier);
return pmsProductRequirementMapper.updatePmsProductRequirement(pmsProductRequirement);
}
@Override
@Transactional(rollbackFor = Exception.class)
public int deleteUserReqByIds(Long[] ids) {
@ -304,7 +297,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
// 记录评审意见
pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord(
productReqReviewVo.toUserReqRecord(SecurityUtils.getUsername()));
return updateRequirement(userReq, userReq.getPmsProductIdentifier());
return updateRequirement(userReq);
}
@ -370,7 +363,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
PmsProductReqOperationRecord pmsProductReqOperationRecord
= productReqReviewVo.toReqSpecsRecord(SecurityUtils.getUsername());
pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord(pmsProductReqOperationRecord);
return updateRequirement(reqSpecs, reqSpecs.getPmsProductIdentifier());
return updateRequirement(reqSpecs);
}
/**
@ -524,7 +517,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
// 已评审或已计划的需规需要进行变更创建一条对应的需规
// 调整原需规状态
oldPmsProductRequirement.setStatus(ProductReqStatus.getToStatus(oldPmsProductRequirement.getStatus()).getKey());
updateRequirement(oldPmsProductRequirement, oldPmsProductRequirement.getPmsProductIdentifier());
updateRequirement(oldPmsProductRequirement);
// 创建变更后的需规
PmsProductRequirement changingReqSpecs = oldPmsProductRequirement.toChangeReqSpecs(productReqSpecsChangeVo);
if (StringUtils.isNotEmpty(productReqSpecsChangeVo.getTitle())) {
@ -567,7 +560,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
reqSpecs.setPmsProjectId(productReqSpecsActivePlanVo.getProjectId());
reqSpecs.setProjectReqId(projectIssue.getLong("id"));
reqSpecs.setStatus(ProductReqStatus.PLANNED_REQ_SPECS.getKey());
int success = updateRequirement(reqSpecs, reqSpecs.getPmsProductIdentifier());
int success = updateRequirement(reqSpecs);
pmsProductReqOperationRecordService.insertPmsProductReqOperationRecord(
productReqSpecsActivePlanVo.toPmsProductReqOperationRecord(reqSpecs)
);
@ -615,7 +608,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
}
}
pmsProductRequirement.setStatus(productReqStatus.getKey());
updateRequirement(pmsProductRequirement, pmsProductRequirement.getPmsProductIdentifier());
updateRequirement(pmsProductRequirement);
}
@Override
@ -697,96 +690,6 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
return productUserReqDetailVo;
}
private void checkPmsProductRequirement(PmsProductRequirement pmsProductRequirement, PmsProduct pmsProduct, PmsProductRequirement oldPmsProductRequirement) {
if (StringUtils.isNotBlank(pmsProductRequirement.getRequirementAssigneeGitlinkIds())) {
String[] gitlinkUserIdStrList = pmsProductRequirement.getRequirementAssigneeGitlinkIds().split(",");
checkGitlinkUserIds(gitlinkUserIdStrList, pmsProduct);
}
// 校验产品计划是否存在
if (pmsProductRequirement.getPmsProductPlanId() != null) {
PmsProductPlan pmsProductPlan = pmsProductPlanService.selectPmsProductPlanById(pmsProductRequirement.getPmsProductPlanId(), false);
if (!pmsProductPlan.getPmsProductIdentifier().equals(pmsProduct.getProductIdentifier())) {
throw new ServiceException("该产品计划不属于当前产品(计划标题[%s],产品名称[%s])", pmsProductPlan.getPlanTitle(), pmsProduct.getProductName());
}
if (oldPmsProductRequirement == null || oldPmsProductRequirement.getPmsProductPlanId() == null) {
// 当原需求没有计划时此操作相当于将该需求移入该计划需要更新计划的更新时间
pmsProductPlanService.updatePmsProductPlanChange(pmsProductRequirement.getPmsProductPlanId());
} else if (!oldPmsProductRequirement.getPmsProductPlanId().equals(pmsProductRequirement.getPmsProductPlanId())) {
// 当原需求有计划且该计划id与原计划id不同时此操作相当于从原计划移入新计划需要更新原计划和新计划的更新时间
pmsProductPlanService.updatePmsProductPlanChange(pmsProductRequirement.getPmsProductPlanId());
pmsProductPlanService.updatePmsProductPlanChange(oldPmsProductRequirement.getPmsProductPlanId());
}
} else if (oldPmsProductRequirement != null && oldPmsProductRequirement.getPmsProductPlanId() != null) {
// 当原需求有计划且当前设置计划为空时此操作相当于将该需求从原计划中移除需更新原计划的更新时间
pmsProductPlanService.updatePmsProductPlanChange(oldPmsProductRequirement.getPmsProductPlanId());
}
// 校验项目是否存在
if (pmsProductRequirement.getPmsProjectId() != null) {
checkProjectId(pmsProductRequirement.getPmsProjectId(), pmsProduct);
}
// 校验模块是否存在
if (pmsProductRequirement.getPmsProductModuleId() != null) {
checkModuleId(pmsProductRequirement.getPmsProductModuleId(), pmsProduct);
}
// 校验标记是否存在
pmsProductRequirementTagService.checkTags(pmsProductRequirement.getTags(), PmsConstants.PRODUCT_TAG_AND_MODULE_TYPE, pmsProduct.getPmsEnterpriseId());
pmsProductRequirement.setTagIds(pmsProductRequirement.getTags());
//校验结束时间需大于开始时间
if (pmsProductRequirement.getStartTime() != null && pmsProductRequirement.getEndTime() != null) {
if (pmsProductRequirement.getStartTime().after(pmsProductRequirement.getEndTime())) {
throw new ServiceException("结束时间不能早于开始时间");
}
}
// 检查附件列表是否有异常数据
pmsCommonService.getAllFileByFileIdentifiers(pmsProductRequirement.getFileIdentifiers());
}
/**
* 修改产品需求
*
* @param pmsProductRequirement 产品需求
* @return 结果
*/
@Override
public int updatePmsProductRequirement(PmsProductRequirement pmsProductRequirement) {
// 通过id检查需修改的产品需求是否存在
PmsProductRequirement oldPmsProductRequirement = selectPmsProductRequirementById(pmsProductRequirement.getId(), true);
pmsProductRequirement.setPmsProductIdentifier(oldPmsProductRequirement.getPmsProductIdentifier());
if (pmsProductRequirement.getPriorityId() != null) {
// 设置需求优先级
Long priorityId =
pmsProductPriorityService.selectPmsProductPriorityIdByInputId(pmsProductRequirement.getPriorityId(), PmsConstants.PRODUCT_STATUS_OR_PRIORITY_REQUIREMENT_TYPE);
pmsProductRequirement.setPriorityId(priorityId);
}
// 设置需求状态
// TODO:需要根据用户需求需求规格来判断需求状态
// pmsProductRequirement.setStatusId(statusId);
PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(oldPmsProductRequirement.getPmsProductIdentifier());
checkPmsProductRequirement(pmsProductRequirement, pmsProduct, oldPmsProductRequirement);
if (pmsProductRequirement.getStartTime() != null && pmsProductRequirement.getEndTime() == null) {
if (oldPmsProductRequirement.getEndTime() != null && pmsProductRequirement.getStartTime().after(oldPmsProductRequirement.getEndTime())) {
throw new ServiceException("开始时间不能晚于结束时间");
}
}
if (pmsProductRequirement.getStartTime() == null && pmsProductRequirement.getEndTime() != null) {
if (oldPmsProductRequirement.getStartTime() != null && oldPmsProductRequirement.getStartTime().after(pmsProductRequirement.getEndTime())) {
throw new ServiceException("结束时间不能早于开始时间");
}
}
pmsProductRequirement.setUpdateBy(SecurityUtils.getUsername());
pmsProductRequirement.setUpdateTime(DateUtils.getNowDate());
pmsProductService.updatePmsProductChange(oldPmsProductRequirement.getPmsProductIdentifier());
return pmsProductRequirementMapper.updatePmsProductRequirement(pmsProductRequirement);
}
@Override
public int updatePmsProductRequirementChange(Long id) {
PmsProductRequirement pmsProductRequirement = selectPmsProductRequirementById(id, false);
@ -854,7 +757,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
List<PmsProductRequirement> pmsProductRequirementList = pmsProductRequirementMapper.selectPmsProductRequirementList(pmsProductRequirementSearch);
for (PmsProductRequirement pmsProductRequirement : pmsProductRequirementList) {
pmsProductRequirement.setPmsProductPlanId(null);
updateRequirement(pmsProductRequirement, pmsProductRequirement.getPmsProductIdentifier());
updateRequirement(pmsProductRequirement);
}
}
@ -865,7 +768,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
List<PmsProductRequirement> pmsProductRequirementList = pmsProductRequirementMapper.selectPmsProductRequirementList(pmsProductRequirementSearch);
for (PmsProductRequirement pmsProductRequirement : pmsProductRequirementList) {
pmsProductRequirement.setPmsProductModuleId(null);
updatePmsProductRequirement(pmsProductRequirement);
updateRequirement(pmsProductRequirement);
}
}
@ -1016,4 +919,17 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
}
return pmsProductRequirementMapper.selectReqCountGroupByStatus(pmsProductIdentifier, statusList);
}
public int updateRequirement(PmsProductRequirement pmsProductRequirement, String productIdentifier) {
pmsProductRequirement.setPmsProductIdentifier(productIdentifier);
return updateRequirement(pmsProductRequirement);
}
@Override
public int updateRequirement(PmsProductRequirement pmsProductRequirement) {
pmsProductRequirement.setUpdateBy(SecurityUtils.getUsername());
pmsProductRequirement.setUpdateTime(DateUtils.getNowDate());
pmsProductService.updatePmsProductChange(pmsProductRequirement.getPmsProductIdentifier());
return pmsProductRequirementMapper.updatePmsProductRequirement(pmsProductRequirement);
}
}