feat(项目管理产品需求重构): 完善产品中的用户需求功能开发
1. 新增接口:查询用户需求列表 2. 新增产品需求状态枚举类(支持用户需求和需求规格) 3. 产品需求新增字段:需求来源用户、需求来源单位 Signed-off-by: OTTO <731554297@qq.com>
This commit is contained in:
parent
60cf5b9cba
commit
b987518add
|
|
@ -0,0 +1,49 @@
|
|||
package com.microservices.pms.product.controller;
|
||||
|
||||
import com.microservices.common.core.web.controller.BaseController;
|
||||
import com.microservices.common.core.web.page.GenericsTableDataInfo;
|
||||
import com.microservices.common.security.annotation.RequiresPermissions;
|
||||
import com.microservices.pms.product.domain.vo.ProductUserReqDataVo;
|
||||
import com.microservices.pms.product.domain.vo.ProductUserReqSearchVo;
|
||||
import com.microservices.pms.product.service.IPmsProductModuleService;
|
||||
import com.microservices.pms.product.service.IPmsProductRequirementService;
|
||||
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.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
/**
|
||||
* 产品用户需求相关接口
|
||||
*
|
||||
* @author otto
|
||||
* @date 2023-10-10
|
||||
*/
|
||||
@RestController
|
||||
@Api(tags = "项目管理-用户需求相关接口")
|
||||
@RequestMapping("/{enterpriseIdentifier}/pmsProductUserRequirement")
|
||||
@ApiImplicitParams({
|
||||
@ApiImplicitParam(name = "enterpriseIdentifier", value = "企业标识", paramType = "path", dataType = "String")
|
||||
})
|
||||
public class PmsProductUserRequirementController extends BaseController {
|
||||
@Autowired
|
||||
private IPmsProductRequirementService pmsProductRequirementService;
|
||||
@Autowired
|
||||
private IPmsProductModuleService pmsProductModuleService;
|
||||
|
||||
/**
|
||||
* 查询产品用户需求列表
|
||||
*/
|
||||
@ApiOperation(value = "查询用户需求列表")
|
||||
@RequiresPermissions("pms:pmsProduct:show")
|
||||
@GetMapping("/list")
|
||||
public GenericsTableDataInfo<ProductUserReqDataVo> list(@PathVariable String enterpriseIdentifier, @Validated ProductUserReqSearchVo productUserReqSearchVo) {
|
||||
startPage();
|
||||
return pmsProductRequirementService.selectUserReqList(enterpriseIdentifier, productUserReqSearchVo);
|
||||
}
|
||||
}
|
||||
|
|
@ -5,6 +5,7 @@ import com.fasterxml.jackson.annotation.JsonInclude;
|
|||
import com.microservices.common.core.utils.bean.BeanUtils;
|
||||
import com.microservices.common.core.web.domain.BaseEntity;
|
||||
import com.microservices.pms.product.domain.vo.PmsProductRequirementDataVo;
|
||||
import com.microservices.pms.product.domain.vo.ProductUserReqDataVo;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
|
@ -137,6 +138,12 @@ public class PmsProductRequirement extends BaseEntity
|
|||
@ApiModelProperty(value = "产品需求类型")
|
||||
private String type;
|
||||
|
||||
@ApiModelProperty(value = "需求来源用户")
|
||||
private String sourceUser;
|
||||
|
||||
@ApiModelProperty(value = "需求来源单位")
|
||||
private String sourceCompany;
|
||||
|
||||
@ApiModelProperty(value = "需求标识")
|
||||
private String identifier;
|
||||
|
||||
|
|
@ -145,4 +152,10 @@ public class PmsProductRequirement extends BaseEntity
|
|||
BeanUtils.copyProperties(this, target);
|
||||
return target;
|
||||
}
|
||||
|
||||
public ProductUserReqDataVo toProductUserReqDataVo() {
|
||||
ProductUserReqDataVo target = new ProductUserReqDataVo();
|
||||
BeanUtils.copyProperties(this, target);
|
||||
return target;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,17 +4,19 @@ import lombok.Getter;
|
|||
|
||||
/**
|
||||
* 产品需求状态
|
||||
* @author OTTO
|
||||
*/
|
||||
@Getter
|
||||
public enum ProductReqStatus {
|
||||
USER_REQ("userReq", "待评审", "待评审的用户需求"),
|
||||
REJECTED_USER_REQ("rejectedUserReq", "评审失败", "已拒绝的用户需求"),
|
||||
REJECTED_USER_REQ("rejectedUserReq", "已拒绝", "已拒绝的用户需求"),
|
||||
REVIEWED_USER_REQ("reviewedUserReq", "已评审", "已评审的用户需求"),
|
||||
PENDING_REVIEW_REQ_SPECS("pendingReviewReqSpecs", "待评审", "待评审的需求规格"),
|
||||
REVIEWED_REQ_SPECS_CHANGING("reviewedReqSpecsChanging", "已评审", "已评审的需求规格(变更中)"),
|
||||
PLANNED_REQ_SPECS("plannedReqSpecs", "计划中", "计划中的需求规格"),
|
||||
PENDING_MODIFIED_REQ_SPECS("pendingModifiedReqSpecs", "待修正", "待修正的需求规格"),
|
||||
REJECTED_REQ_SPECS("rejectedReqSpecs", "已拒绝", "已拒绝的需求规格"),
|
||||
REVIEWED_REQ_SPECS("reviewedReqSpecs", "已评审", "已评审的需求规格");
|
||||
REVIEWED_REQ_SPECS("reviewedReqSpecs", "已评审", "已评审的需求规格"),
|
||||
COMPLETED_REQ_SPECS("completedReqSpecs", "已完成", "已完成的需求规格");
|
||||
private final String key;
|
||||
private final String name;
|
||||
private final String remark;
|
||||
|
|
@ -33,4 +35,13 @@ public enum ProductReqStatus {
|
|||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static String getNameByKey(String status) {
|
||||
for (ProductReqStatus productReqStatus : ProductReqStatus.values()) {
|
||||
if (productReqStatus.getKey().equals(status)) {
|
||||
return productReqStatus.getName();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,30 @@
|
|||
package com.microservices.pms.product.domain.vo;
|
||||
|
||||
import com.microservices.system.api.domain.SysFileInfo;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 产品需求对象 pms_product_requirement
|
||||
*
|
||||
* @author otto
|
||||
* @date 2023-10-10
|
||||
*/
|
||||
@Data
|
||||
@ApiModel("用户需求详细数据对象")
|
||||
public class ProductReqUserDetailVo extends ProductUserReqDataVo {
|
||||
/**
|
||||
* 正文
|
||||
*/
|
||||
@ApiModelProperty(value = "正文")
|
||||
private String content;
|
||||
|
||||
/**
|
||||
* 附件列表
|
||||
*/
|
||||
@ApiModelProperty(value = "附件列表")
|
||||
private List<SysFileInfo> fileList;
|
||||
}
|
||||
|
|
@ -0,0 +1,60 @@
|
|||
package com.microservices.pms.product.domain.vo;
|
||||
|
||||
import com.microservices.common.core.utils.bean.BeanUtils;
|
||||
import com.microservices.pms.product.domain.PmsProductModule;
|
||||
import com.microservices.pms.project.domain.vo.BaseEntityVo;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* 产品需求对象 pms_product_requirement
|
||||
*
|
||||
* @author otto
|
||||
* @date 2023-10-10
|
||||
*/
|
||||
@Data
|
||||
@ApiModel("用户需求数据对象")
|
||||
public class ProductUserReqDataVo extends BaseEntityVo {
|
||||
/**
|
||||
* 需求标识
|
||||
*/
|
||||
@ApiModelProperty(value = "需求标识")
|
||||
private Long id;
|
||||
|
||||
/**
|
||||
* 索引
|
||||
*/
|
||||
@ApiModelProperty(value = "索引")
|
||||
private Long index;
|
||||
|
||||
/**
|
||||
* 标题
|
||||
*/
|
||||
@ApiModelProperty(value = "标题")
|
||||
private String title;
|
||||
|
||||
/**
|
||||
* 关联状态
|
||||
*/
|
||||
@ApiModelProperty(value = "需求状态")
|
||||
private String status;
|
||||
|
||||
/**
|
||||
* 关联产品模块
|
||||
*/
|
||||
@ApiModelProperty(value = "从属产品模块")
|
||||
private PmsProductModule pmsProductModule;
|
||||
|
||||
@ApiModelProperty(value = "需求来源用户")
|
||||
private String sourceUser;
|
||||
|
||||
@ApiModelProperty(value = "需求来源单位")
|
||||
private String sourceCompany;
|
||||
|
||||
public PmsProductRequirementDetailVo toPmsProductRequirementDetailVo() {
|
||||
PmsProductRequirementDetailVo target = new PmsProductRequirementDetailVo();
|
||||
BeanUtils.copyProperties(this, target);
|
||||
return target;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
package com.microservices.pms.product.domain.vo;
|
||||
|
||||
import com.microservices.common.core.utils.bean.BeanUtils;
|
||||
import com.microservices.pms.product.domain.PmsProductRequirement;
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
|
||||
/**
|
||||
* 产品需求对象 pms_product_requirement
|
||||
*
|
||||
* @author otto
|
||||
* @date 2023-10-10
|
||||
*/
|
||||
@Data
|
||||
@ApiModel("用户需求搜索对象")
|
||||
public class ProductUserReqSearchVo {
|
||||
/**
|
||||
* 标题
|
||||
*/
|
||||
@ApiModelProperty(value = "模糊搜索标题、提出人或需求来源")
|
||||
private String search;
|
||||
|
||||
/**
|
||||
* 关联产品模块标识
|
||||
*/
|
||||
@ApiModelProperty(value = "关联产品标识", required = true)
|
||||
@NotNull
|
||||
private String pmsProductIdentifier;
|
||||
|
||||
public PmsProductRequirement toPmsProductRequirement() {
|
||||
PmsProductRequirement target = new PmsProductRequirement();
|
||||
BeanUtils.copyProperties(this, target);
|
||||
return target;
|
||||
}
|
||||
}
|
||||
|
|
@ -2,6 +2,7 @@ package com.microservices.pms.product.mapper;
|
|||
|
||||
import com.microservices.pms.product.domain.PmsProductRequirement;
|
||||
import com.microservices.pms.product.domain.vo.PmsProductRequirementBatchUpdateVo;
|
||||
import com.microservices.pms.product.domain.vo.ProductUserReqSearchVo;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
|
|
@ -102,4 +103,6 @@ public interface PmsProductRequirementMapper
|
|||
* @return 产品标识列表
|
||||
*/
|
||||
List<String> selectProductIdentifierListInRequirementIdList(@Param("idList") List<Long> idList);
|
||||
|
||||
List<PmsProductRequirement> selectUserReqList(ProductUserReqSearchVo productUserReqSearchVo);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -5,6 +5,8 @@ import com.microservices.common.core.web.page.GenericsTableDataInfo;
|
|||
import com.microservices.pms.product.domain.PmsProductRequirement;
|
||||
import com.microservices.pms.product.domain.vo.PmsProductRequirementDataVo;
|
||||
import com.microservices.pms.product.domain.vo.PmsProductRequirementDetailVo;
|
||||
import com.microservices.pms.product.domain.vo.ProductUserReqDataVo;
|
||||
import com.microservices.pms.product.domain.vo.ProductUserReqSearchVo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -131,4 +133,13 @@ public interface IPmsProductRequirementService
|
|||
* @return 产品需求列表
|
||||
*/
|
||||
List<PmsProductRequirement> selectPmsProductRequirementList(PmsProductRequirement pmsProductRequirementSearch);
|
||||
|
||||
/**
|
||||
* 查询用户需求列表
|
||||
*
|
||||
* @param enterpriseIdentifier 企业标识
|
||||
* @param productUserReqSearchVo 查询条件
|
||||
* @return 用户需求列表
|
||||
*/
|
||||
GenericsTableDataInfo<ProductUserReqDataVo> selectUserReqList(String enterpriseIdentifier, ProductUserReqSearchVo productUserReqSearchVo);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -14,9 +14,7 @@ import com.microservices.pms.enterprise.domain.PmsEnterprise;
|
|||
import com.microservices.pms.enterprise.service.IPmsEnterpriseService;
|
||||
import com.microservices.pms.journals.service.IPmsJournalsService;
|
||||
import com.microservices.pms.product.domain.*;
|
||||
import com.microservices.pms.product.domain.vo.PmsProductRequirementBatchUpdateVo;
|
||||
import com.microservices.pms.product.domain.vo.PmsProductRequirementDataVo;
|
||||
import com.microservices.pms.product.domain.vo.PmsProductRequirementDetailVo;
|
||||
import com.microservices.pms.product.domain.vo.*;
|
||||
import com.microservices.pms.product.mapper.PmsProductRequirementMapper;
|
||||
import com.microservices.pms.product.service.*;
|
||||
import com.microservices.pms.project.domain.PmsProject;
|
||||
|
|
@ -37,13 +35,12 @@ import static com.microservices.common.core.utils.PageUtils.startPage;
|
|||
|
||||
/**
|
||||
* 产品需求Service业务层处理
|
||||
*
|
||||
*
|
||||
* @author otto
|
||||
* @date 2023-10-10
|
||||
*/
|
||||
@Service
|
||||
public class PmsProductRequirementServiceImpl implements IPmsProductRequirementService
|
||||
{
|
||||
public class PmsProductRequirementServiceImpl implements IPmsProductRequirementService {
|
||||
@Autowired
|
||||
private PmsProductRequirementMapper pmsProductRequirementMapper;
|
||||
@Autowired
|
||||
|
|
@ -70,20 +67,19 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
|
|||
|
||||
/**
|
||||
* 查询产品需求
|
||||
*
|
||||
*
|
||||
* @param id 产品需求主键
|
||||
* @return 产品需求
|
||||
*/
|
||||
@Override
|
||||
public PmsProductRequirementDetailVo selectPmsProductRequirementDetailById(Long id)
|
||||
{
|
||||
public PmsProductRequirementDetailVo selectPmsProductRequirementDetailById(Long id) {
|
||||
PmsProductRequirement pmsProductRequirement = selectPmsProductRequirementById(id, false);
|
||||
return toPmsProductRequirementDetailVo(pmsProductRequirement);
|
||||
}
|
||||
|
||||
private PmsProductRequirementDetailVo toPmsProductRequirementDetailVo(PmsProductRequirement pmsProductRequirement){
|
||||
private PmsProductRequirementDetailVo toPmsProductRequirementDetailVo(PmsProductRequirement pmsProductRequirement) {
|
||||
PmsProductRequirementDataVo pmsProductRequirementDataVo = toPmsProductRequirementDataVo(pmsProductRequirement, null);
|
||||
PmsProductRequirementDetailVo pmsProductRequirementDetailVo=pmsProductRequirementDataVo.toPmsProductRequirementDetailVo();
|
||||
PmsProductRequirementDetailVo pmsProductRequirementDetailVo = pmsProductRequirementDataVo.toPmsProductRequirementDetailVo();
|
||||
pmsProductRequirementDetailVo.setContent(pmsProductRequirement.getContent());
|
||||
// 设置文件列表
|
||||
pmsProductRequirementDetailVo.setFileList(pmsCommonService.getAllFileByFileIdentifiers(pmsProductRequirement.getFileIdentifiers())
|
||||
|
|
@ -97,8 +93,8 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
|
|||
|
||||
@Override
|
||||
public PmsProductRequirement selectPmsProductRequirementById(Long id, boolean checkRole) {
|
||||
PmsProductRequirement pmsProductRequirement=pmsProductRequirementMapper.selectPmsProductRequirementById(id);
|
||||
if(pmsProductRequirement==null){
|
||||
PmsProductRequirement pmsProductRequirement = pmsProductRequirementMapper.selectPmsProductRequirementById(id);
|
||||
if (pmsProductRequirement == null) {
|
||||
throw new NotFoundException("该产品需求不存在(产品需求Id[%d])", id);
|
||||
}
|
||||
PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(pmsProductRequirement.getPmsProductIdentifier());
|
||||
|
|
@ -109,7 +105,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
|
|||
}
|
||||
|
||||
private PmsProductRequirementDataVo toPmsProductRequirementDataVo(PmsProductRequirement pmsProductRequirement, HashMap<String, Object> hashMap) {
|
||||
PmsProductRequirementDataVo pmsProductRequirementDataVo=pmsProductRequirement.toPmsProductRequirementDataVo();
|
||||
PmsProductRequirementDataVo pmsProductRequirementDataVo = pmsProductRequirement.toPmsProductRequirementDataVo();
|
||||
// 设置优先级
|
||||
pmsProductRequirementDataVo.setPriority(
|
||||
PmsUtils.getSelectObjectInCache(
|
||||
|
|
@ -177,36 +173,52 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
|
|||
return pmsProductRequirementDataVo;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public GenericsTableDataInfo<ProductUserReqDataVo> selectUserReqList(String enterpriseIdentifier, ProductUserReqSearchVo productUserReqSearchVo) {
|
||||
pmsProductService.selectPmsProductByIdentifier(productUserReqSearchVo.getPmsProductIdentifier());
|
||||
startPage();
|
||||
List<PmsProductRequirement> userReqList = pmsProductRequirementMapper.selectUserReqList(productUserReqSearchVo);
|
||||
HashMap<String, Object> selectCache = new HashMap<>();
|
||||
return PageUtils.toPage(userReqList, x -> toProductUserReqDataVo(x, selectCache));
|
||||
}
|
||||
|
||||
private ProductUserReqDataVo toProductUserReqDataVo(PmsProductRequirement pmsProductRequirement, HashMap<String, Object> hashMap) {
|
||||
ProductUserReqDataVo productUserReqDataVo = pmsProductRequirement.toProductUserReqDataVo();
|
||||
// 设置状态
|
||||
productUserReqDataVo.setStatus(ProductReqStatus.getNameByKey(pmsProductRequirement.getStatus()));
|
||||
|
||||
return productUserReqDataVo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询产品需求列表
|
||||
*
|
||||
*
|
||||
* @param pmsProductRequirementSearch 产品需求
|
||||
* @return 产品需求
|
||||
*/
|
||||
@Override
|
||||
public GenericsTableDataInfo<PmsProductRequirementDataVo> selectPmsProductRequirementPageList(PmsProductRequirement pmsProductRequirementSearch)
|
||||
{
|
||||
public GenericsTableDataInfo<PmsProductRequirementDataVo> selectPmsProductRequirementPageList(PmsProductRequirement pmsProductRequirementSearch) {
|
||||
pmsProductService.selectPmsProductByIdentifier(pmsProductRequirementSearch.getPmsProductIdentifier());
|
||||
startPage();
|
||||
List<PmsProductRequirement> pmsProductRequirementList=pmsProductRequirementMapper.selectPmsProductRequirementList(pmsProductRequirementSearch);
|
||||
List<PmsProductRequirement> pmsProductRequirementList = pmsProductRequirementMapper.selectPmsProductRequirementList(pmsProductRequirementSearch);
|
||||
HashMap<String, Object> selectCache = new HashMap<>();
|
||||
return PageUtils.toPage(pmsProductRequirementList, x -> toPmsProductRequirementDataVo(x, selectCache));
|
||||
}
|
||||
|
||||
/**
|
||||
* 新增产品需求
|
||||
*
|
||||
*
|
||||
* @param pmsProductRequirement 产品需求
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public Long insertPmsProductRequirement(PmsProductRequirement pmsProductRequirement)
|
||||
{
|
||||
public Long insertPmsProductRequirement(PmsProductRequirement pmsProductRequirement) {
|
||||
// 校验产品是否存在
|
||||
PmsProduct pmsProduct = pmsProductService.selectPmsProductByIdentifier(pmsProductRequirement.getPmsProductIdentifier());
|
||||
pmsProductService.checkManageRole(pmsProduct);
|
||||
// 设置需求优先级,若未传入则设置为默认优先级
|
||||
Long priorityId=
|
||||
Long priorityId =
|
||||
pmsProductPriorityService.selectPmsProductPriorityIdByInputId(pmsProductRequirement.getPriorityId(), PmsConstants.PRODUCT_STATUS_OR_PRIORITY_REQUIREMENT_TYPE);
|
||||
pmsProductRequirement.setPriorityId(priorityId);
|
||||
// 设置默认需求状态
|
||||
|
|
@ -214,14 +226,14 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
|
|||
// pmsProductRequirement.setStatusId(statusId);
|
||||
checkPmsProductRequirement(pmsProductRequirement, pmsProduct, null);
|
||||
|
||||
Date now=DateUtils.getNowDate();
|
||||
String username=SecurityUtils.getUsername();
|
||||
Date now = DateUtils.getNowDate();
|
||||
String username = SecurityUtils.getUsername();
|
||||
pmsProductRequirement.setCreateBy(username);
|
||||
pmsProductRequirement.setCreateTime(now);
|
||||
pmsProductRequirement.setUpdateBy(username);
|
||||
pmsProductRequirement.setUpdateTime(now);
|
||||
// 获取当前产品下需求的最大索引值
|
||||
Long maxIndex=pmsProductRequirementMapper.selectPmsProductRequirementMaxIndexByProductIdentifier(pmsProductRequirement.getPmsProductIdentifier());
|
||||
Long maxIndex = pmsProductRequirementMapper.selectPmsProductRequirementMaxIndexByProductIdentifier(pmsProductRequirement.getPmsProductIdentifier());
|
||||
if (maxIndex == null) {
|
||||
maxIndex = 1L;
|
||||
}
|
||||
|
|
@ -238,10 +250,10 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
|
|||
}
|
||||
|
||||
// 校验产品计划是否存在
|
||||
if(pmsProductRequirement.getPmsProductPlanId()!=null){
|
||||
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 (!pmsProductPlan.getPmsProductIdentifier().equals(pmsProduct.getProductIdentifier())) {
|
||||
throw new ServiceException("该产品计划不属于当前产品(计划标题[%s],产品名称[%s])", pmsProductPlan.getPlanTitle(), pmsProduct.getProductName());
|
||||
}
|
||||
|
||||
if (oldPmsProductRequirement == null || oldPmsProductRequirement.getPmsProductPlanId() == null) {
|
||||
|
|
@ -263,7 +275,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
|
|||
|
||||
|
||||
// 校验模块是否存在
|
||||
if(pmsProductRequirement.getPmsProductModuleId()!=null){
|
||||
if (pmsProductRequirement.getPmsProductModuleId() != null) {
|
||||
checkModuleId(pmsProductRequirement.getPmsProductModuleId(), pmsProduct);
|
||||
}
|
||||
|
||||
|
|
@ -272,8 +284,8 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
|
|||
pmsProductRequirement.setTagIds(pmsProductRequirement.getTags());
|
||||
|
||||
//校验结束时间需大于开始时间
|
||||
if(pmsProductRequirement.getStartTime()!=null&&pmsProductRequirement.getEndTime()!=null){
|
||||
if(pmsProductRequirement.getStartTime().after(pmsProductRequirement.getEndTime())){
|
||||
if (pmsProductRequirement.getStartTime() != null && pmsProductRequirement.getEndTime() != null) {
|
||||
if (pmsProductRequirement.getStartTime().after(pmsProductRequirement.getEndTime())) {
|
||||
throw new ServiceException("结束时间不能早于开始时间");
|
||||
}
|
||||
}
|
||||
|
|
@ -284,19 +296,18 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
|
|||
|
||||
/**
|
||||
* 修改产品需求
|
||||
*
|
||||
*
|
||||
* @param pmsProductRequirement 产品需求
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
public int updatePmsProductRequirement(PmsProductRequirement pmsProductRequirement)
|
||||
{
|
||||
public int updatePmsProductRequirement(PmsProductRequirement pmsProductRequirement) {
|
||||
// 通过id检查需修改的产品需求是否存在
|
||||
PmsProductRequirement oldPmsProductRequirement = selectPmsProductRequirementById(pmsProductRequirement.getId(), true);
|
||||
pmsProductRequirement.setPmsProductIdentifier(oldPmsProductRequirement.getPmsProductIdentifier());
|
||||
if(pmsProductRequirement.getPriorityId()!=null){
|
||||
if (pmsProductRequirement.getPriorityId() != null) {
|
||||
// 设置需求优先级
|
||||
Long priorityId=
|
||||
Long priorityId =
|
||||
pmsProductPriorityService.selectPmsProductPriorityIdByInputId(pmsProductRequirement.getPriorityId(), PmsConstants.PRODUCT_STATUS_OR_PRIORITY_REQUIREMENT_TYPE);
|
||||
pmsProductRequirement.setPriorityId(priorityId);
|
||||
}
|
||||
|
|
@ -304,7 +315,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
|
|||
// 设置需求状态
|
||||
// TODO:需要根据用户需求、需求规格来判断需求状态
|
||||
// pmsProductRequirement.setStatusId(statusId);
|
||||
PmsProduct pmsProduct=pmsProductService.selectPmsProductByIdentifier(oldPmsProductRequirement.getPmsProductIdentifier());
|
||||
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())) {
|
||||
|
|
@ -333,14 +344,13 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
|
|||
|
||||
/**
|
||||
* 批量删除产品需求
|
||||
*
|
||||
*
|
||||
* @param ids 需要删除的产品需求主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public int deletePmsProductRequirementByIds(Long[] ids)
|
||||
{
|
||||
public int deletePmsProductRequirementByIds(Long[] ids) {
|
||||
int success = 0;
|
||||
for (Long id : ids) {
|
||||
success += deletePmsProductRequirementById(id);
|
||||
|
|
@ -350,14 +360,13 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
|
|||
|
||||
/**
|
||||
* 删除产品需求信息
|
||||
*
|
||||
*
|
||||
* @param id 产品需求主键
|
||||
* @return 结果
|
||||
*/
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public int deletePmsProductRequirementById(Long id)
|
||||
{
|
||||
public int deletePmsProductRequirementById(Long id) {
|
||||
PmsProductRequirement oldPmsProductRequirement = selectPmsProductRequirementById(id, true);
|
||||
if (oldPmsProductRequirement.getPmsProductPlanId() != null) {
|
||||
pmsProductPlanService.updatePmsProductPlanChange(oldPmsProductRequirement.getPmsProductPlanId());
|
||||
|
|
@ -374,9 +383,9 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
|
|||
|
||||
@Override
|
||||
public PmsProductRequirementDetailVo selectPmsProductRequirementDetailByProductIdentifierAndIndex(String productIdentifier, Long index) {
|
||||
PmsProductRequirement pmsProductRequirement=pmsProductRequirementMapper.selectPmsProductRequirementByProductIdentifierAndIndex(productIdentifier,index);
|
||||
if(pmsProductRequirement==null){
|
||||
throw new ServiceException("该产品需求不存在(产品标识[%s],产品需求索引[%d])",productIdentifier,index);
|
||||
PmsProductRequirement pmsProductRequirement = pmsProductRequirementMapper.selectPmsProductRequirementByProductIdentifierAndIndex(productIdentifier, index);
|
||||
if (pmsProductRequirement == null) {
|
||||
throw new ServiceException("该产品需求不存在(产品标识[%s],产品需求索引[%d])", productIdentifier, index);
|
||||
}
|
||||
return toPmsProductRequirementDetailVo(pmsProductRequirement);
|
||||
}
|
||||
|
|
@ -446,16 +455,16 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
|
|||
private int batchUpdatePmsProductRequirementByJsonObject(List<Long> idList, JSONObject jsonObject) {
|
||||
PmsProductRequirementBatchUpdateVo pmsProductRequirementBatchUpdateVo = new PmsProductRequirementBatchUpdateVo();
|
||||
pmsProductRequirementBatchUpdateVo.setIdList(idList);
|
||||
if(jsonObject.containsKey("priorityId")){
|
||||
if (jsonObject.containsKey("priorityId")) {
|
||||
pmsProductRequirementBatchUpdateVo.setPriorityId(jsonObject.getLong("priorityId"));
|
||||
pmsProductRequirementBatchUpdateVo.setPriorityIdIsChange(true);
|
||||
}
|
||||
// TODO:需考虑是否涉及状态的变更
|
||||
if(jsonObject.containsKey("pmsProductModuleId")){
|
||||
if (jsonObject.containsKey("pmsProductModuleId")) {
|
||||
pmsProductRequirementBatchUpdateVo.setPmsProductModuleId(jsonObject.getLong("pmsProductModuleId"));
|
||||
pmsProductRequirementBatchUpdateVo.setPmsProductModuleIdIsChange(true);
|
||||
}
|
||||
if(jsonObject.containsKey("tags")){
|
||||
if (jsonObject.containsKey("tags")) {
|
||||
pmsProductRequirementBatchUpdateVo.setTagIds(jsonObject.getString("tags"));
|
||||
pmsProductRequirementBatchUpdateVo.setTagIdsIsChange(true);
|
||||
}
|
||||
|
|
@ -463,7 +472,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
|
|||
pmsProductRequirementBatchUpdateVo.setRequirementAssigneeGitlinkIds(jsonObject.getString("requirementAssigneeGitlinkIds"));
|
||||
pmsProductRequirementBatchUpdateVo.setRequirementAssigneeGitlinkIdsIsChange(true);
|
||||
}
|
||||
if(jsonObject.containsKey("pmsProjectId")){
|
||||
if (jsonObject.containsKey("pmsProjectId")) {
|
||||
pmsProductRequirementBatchUpdateVo.setPmsProjectId(jsonObject.getLong("pmsProjectId"));
|
||||
pmsProductRequirementBatchUpdateVo.setPmsProjectIdIsChange(true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,6 +30,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<result property="projectReqId" column="project_req_id"/>
|
||||
<result property="type" column="type"/>
|
||||
<result property="identifier" column="identifier"/>
|
||||
<result property="sourceUser" column="source_user"/>
|
||||
<result property="sourceCompany" column="source_company"/>
|
||||
</resultMap>
|
||||
|
||||
<sql id="selectPmsProductRequirementVo">
|
||||
|
|
@ -57,6 +59,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
from_id,
|
||||
project_req_id,
|
||||
type,
|
||||
source_user,
|
||||
source_company,
|
||||
identifier
|
||||
from pms_product_requirement
|
||||
</sql>
|
||||
|
|
@ -133,6 +137,22 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
#{id}
|
||||
</foreach>
|
||||
</select>
|
||||
<select id="selectUserReqList" resultMap="PmsProductRequirementResult">
|
||||
/*keep orderby*/
|
||||
<include refid="selectPmsProductRequirementVo"/>
|
||||
<where>
|
||||
<if test="search != null and search != ''">and
|
||||
(
|
||||
title like concat('%', #{search}, '%')
|
||||
or source_user like concat('%', #{search}, '%')
|
||||
or source_company like concat('%', #{search}, '%')
|
||||
)
|
||||
</if>
|
||||
<if test="pmsProductIdentifier != null ">and pms_product_identifier = #{pmsProductIdentifier}</if>
|
||||
and (`status`= 'userReq' or `status`= 'rejectedUserReq' or `status` = 'reviewedUserReq')
|
||||
</where>
|
||||
order by update_time desc
|
||||
</select>
|
||||
|
||||
<insert id="insertPmsProductRequirement" parameterType="PmsProductRequirement" useGeneratedKeys="true" keyProperty="id">
|
||||
insert into pms_product_requirement
|
||||
|
|
@ -161,6 +181,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="projectReqId != null">project_req_id,</if>
|
||||
<if test="type != null and type != ''">type,</if>
|
||||
<if test="identifier != null and identifier != ''">identifier,</if>
|
||||
<if test="sourceUser != null and sourceUser != ''">source_user,</if>
|
||||
<if test="sourceCompany != null and sourceCompany != ''">source_company,</if>
|
||||
</trim>
|
||||
<trim prefix="values (" suffix=")" suffixOverrides=",">
|
||||
<if test="index != null">#{index},</if>
|
||||
|
|
@ -187,6 +209,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="projectReqId != null">#{projectReqId},</if>
|
||||
<if test="type != null and type != ''">#{type},</if>
|
||||
<if test="identifier != null and identifier != ''">#{identifier},</if>
|
||||
<if test="sourceUser != null and sourceUser != ''">#{sourceUser},</if>
|
||||
<if test="sourceCompany != null and sourceCompany != ''">#{sourceCompany},</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
|
|
@ -217,6 +241,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||
<if test="projectReqId != null and projectReqId != ''">project_req_id = #{project_req_id},</if>
|
||||
<if test="type != null and type != ''">type = #{type},</if>
|
||||
<if test="identifier != null and identifier != ''">identifier = #{identifier},</if>
|
||||
<if test="sourceUser != null and sourceUser != ''">source_user = #{sourceUser},</if>
|
||||
<if test="sourceCompany != null and sourceCompany != ''">source_company = #{sourceCompany},</if>
|
||||
</trim>
|
||||
where id = #{id}
|
||||
</update>
|
||||
|
|
|
|||
Loading…
Reference in New Issue