feat(项目管理产品需求重构): 完善产品中的需求规格功能开发

1. 新增接口:查询需求规格列表
2. 新增接口:获取需求规格详细信息

Signed-off-by: OTTO <731554297@qq.com>
This commit is contained in:
OTTO 2024-11-30 09:19:40 +08:00
parent 8f69ef0d20
commit be54bc56d8
14 changed files with 419 additions and 63 deletions

View File

@ -0,0 +1,101 @@
package com.microservices.pms.product.controller;
import com.microservices.common.core.web.controller.BaseController;
import com.microservices.common.core.web.domain.AjaxResult;
import com.microservices.common.core.web.domain.GenericsAjaxResult;
import com.microservices.common.core.web.page.GenericsTableDataInfo;
import com.microservices.common.log.annotation.Log;
import com.microservices.common.log.enums.BusinessType;
import com.microservices.common.security.annotation.RequiresPermissions;
import com.microservices.pms.product.domain.vo.*;
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.*;
/**
* 产品需求规格相关接口
*
* @author otto
* @date 2023-10-10
*/
@RestController
@Api(tags = "项目管理-需求规格相关接口")
@RequestMapping("/{enterpriseIdentifier}/productRequirementSpecs")
@ApiImplicitParams({
@ApiImplicitParam(name = "enterpriseIdentifier", value = "企业标识", paramType = "path", dataType = "String")
})
public class ProductReqSpecsController extends BaseController {
@Autowired
private IPmsProductRequirementService pmsProductRequirementService;
/**
* 查询产品需求规格列表
*/
@ApiOperation(value = "查询需求规格列表")
@RequiresPermissions("pms:pmsProduct:show")
@GetMapping("/list")
public GenericsTableDataInfo<ProductReqSpecsDataVo> list(@PathVariable String enterpriseIdentifier, @Validated ProductReqSpecsSearchVo productReqSpecsSearchVo) {
return pmsProductRequirementService.selectReqSpecsList(productReqSpecsSearchVo);
}
/**
* 获取需求规格详细信息
*/
@RequiresPermissions("pms:pmsProduct:show")
@GetMapping(value = "/{id}")
@ApiOperation(value = "获取需求规格详细信息")
public GenericsAjaxResult<ProductReqSpecsDetailVo> getInfo(@PathVariable("id") Long id) {
return genericsSuccess(pmsProductRequirementService.selectReqSpecsDetailById(id));
}
/**
* 新增需求规格
*/
@RequiresPermissions("pms:pmsProductRequirement:add")
@Log(title = "需求规格", businessType = BusinessType.INSERT)
@PostMapping
@ApiOperation(value = "新增需求规格")
public AjaxResult add(@PathVariable String enterpriseIdentifier,
@RequestBody @Validated ProductUserReqInputVo productUserReqInputVo) {
productUserReqInputVo.setEnterpriseIdentifier(enterpriseIdentifier);
return success(pmsProductRequirementService.insertUserReq(productUserReqInputVo));
}
/**
* 修改需求规格
*/
@RequiresPermissions("pms:pmsProductRequirement:edit")
@Log(title = "需求规格", businessType = BusinessType.UPDATE)
@PutMapping
@ApiOperation(value = "修改需求规格")
public AjaxResult edit(@RequestBody @Validated ProductUserReqUpdateVo productUserReqUpdateVo) {
return toAjax(pmsProductRequirementService.updateUserReq(productUserReqUpdateVo));
}
/**
* 删除需求规格
*/
@RequiresPermissions("pms:pmsProductRequirement:remove")
@Log(title = "需求规格", businessType = BusinessType.DELETE)
@DeleteMapping("/{ids}")
@ApiOperation(value = "删除需求规格")
public AjaxResult remove(@PathVariable Long[] ids) {
return toAjax(pmsProductRequirementService.deleteUserReqByIds(ids));
}
/**
* 评审需求规格
*/
@RequiresPermissions("pms:pmsProductRequirement:edit")
@Log(title = "需求规格", businessType = BusinessType.UPDATE)
@PutMapping("/review")
@ApiOperation(value = "评审需求规格")
public AjaxResult review(@RequestBody @Validated ProductUserReqReviewVo productUserReqReviewVo) {
return toAjax(pmsProductRequirementService.reviewUserReq(productUserReqReviewVo));
}
}

View File

@ -8,7 +8,6 @@ import com.microservices.common.log.annotation.Log;
import com.microservices.common.log.enums.BusinessType;
import com.microservices.common.security.annotation.RequiresPermissions;
import com.microservices.pms.product.domain.vo.*;
import com.microservices.pms.product.service.IPmsProductModuleService;
import com.microservices.pms.product.service.IPmsProductRequirementService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
@ -26,15 +25,13 @@ import org.springframework.web.bind.annotation.*;
*/
@RestController
@Api(tags = "项目管理-用户需求相关接口")
@RequestMapping("/{enterpriseIdentifier}/pmsProductUserRequirement")
@RequestMapping("/{enterpriseIdentifier}/productUserRequirement")
@ApiImplicitParams({
@ApiImplicitParam(name = "enterpriseIdentifier", value = "企业标识", paramType = "path", dataType = "String")
})
public class ProductUserReqController extends BaseController {
@Autowired
private IPmsProductRequirementService pmsProductRequirementService;
@Autowired
private IPmsProductModuleService pmsProductModuleService;
/**
* 查询产品用户需求列表
@ -42,9 +39,8 @@ public class ProductUserReqController extends BaseController {
@ApiOperation(value = "查询用户需求列表")
@RequiresPermissions("pms:pmsProduct:show")
@GetMapping("/list")
public GenericsTableDataInfo<ProductUserReqDataVo> list(@PathVariable String enterpriseIdentifier, @Validated ProductUserReqSearchVo productUserReqSearchVo) {
startPage();
return pmsProductRequirementService.selectUserReqList(enterpriseIdentifier, productUserReqSearchVo);
public GenericsTableDataInfo<ProductUserReqDataVo> list(@Validated ProductUserReqSearchVo productUserReqSearchVo) {
return pmsProductRequirementService.selectUserReqList(productUserReqSearchVo);
}
/**

View File

@ -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.ProductReqSpecsDataVo;
import com.microservices.pms.product.domain.vo.ProductUserReqDataVo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
@ -115,7 +116,7 @@ public class PmsProductRequirement extends BaseEntity
private Long pmsProjectId;
/** 关联项目ID */
@ApiModelProperty(value = "关联项目ID")
@ApiModelProperty(value = "关联模块ID")
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private List<Long> childrenModuleIdList;
@ -158,4 +159,10 @@ public class PmsProductRequirement extends BaseEntity
BeanUtils.copyProperties(this, target);
return target;
}
public ProductReqSpecsDataVo toProductReqSpecsDataVo() {
ProductReqSpecsDataVo target = new ProductReqSpecsDataVo();
BeanUtils.copyProperties(this, target);
return target;
}
}

View File

@ -0,0 +1,20 @@
package com.microservices.pms.product.domain.enums;
import lombok.Data;
/**
* @author OTTO
*/
@Data
public class CommonEnumType {
private String key;
private String name;
public CommonEnumType() {
}
public CommonEnumType(String key, String name) {
this.key = key;
this.name = name;
}
}

View File

@ -4,6 +4,7 @@ import lombok.Getter;
/**
* 产品需求状态
*
* @author OTTO
*/
@Getter
@ -12,7 +13,7 @@ public enum ProductReqStatus {
REJECTED_USER_REQ("rejectedUserReq", "已拒绝", "已拒绝的用户需求"),
REVIEWED_USER_REQ("reviewedUserReq", "已评审", "已评审的用户需求"),
PENDING_REVIEW_REQ_SPECS("pendingReviewReqSpecs", "待评审", "待评审的需求规格"),
REVIEWED_REQ_SPECS_CHANGING("reviewedReqSpecsChanging", "已评审", "已评审的需求规格(变更中)"),
REVIEWED_REQ_SPECS_CHANGING("reviewedReqSpecsChanging", "已评审(变更中)", "已评审的需求规格(变更中)"),
PLANNED_REQ_SPECS("plannedReqSpecs", "计划中", "计划中的需求规格"),
REJECTED_REQ_SPECS("rejectedReqSpecs", "已拒绝", "已拒绝的需求规格"),
REVIEWED_REQ_SPECS("reviewedReqSpecs", "已评审", "已评审的需求规格"),
@ -36,10 +37,10 @@ public enum ProductReqStatus {
return null;
}
public static String getNameByKey(String status) {
public static CommonEnumType getTypeByKey(String status) {
for (ProductReqStatus productReqStatus : ProductReqStatus.values()) {
if (productReqStatus.getKey().equals(status)) {
return productReqStatus.getName();
return new CommonEnumType(productReqStatus.getKey(), productReqStatus.getName());
}
}
return null;

View File

@ -0,0 +1,51 @@
package com.microservices.pms.product.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.microservices.common.core.utils.bean.BeanUtils;
import com.microservices.pms.product.domain.PmsProductModule;
import com.microservices.pms.product.domain.enums.CommonEnumType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* 产品需求对象 pms_product_requirement
*
* @author otto
* @date 2023-10-10
*/
@Data
@ApiModel("需求规格数据对象")
public class ProductReqSpecsDataVo {
private Long id;
@ApiModelProperty(value = "需求标识")
private String identifier;
@ApiModelProperty(value = "标题")
private String title;
@ApiModelProperty(value = "需求状态")
private CommonEnumType status;
@ApiModelProperty(value = "产品需求类型")
private String type;
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@ApiModelProperty(value = "更新时间")
private Date updateTime;
/**
* 关联产品模块
*/
@ApiModelProperty(value = "关联产品模块")
private PmsProductModule pmsProductModule;
public ProductReqSpecsDetailVo toProductReqSpecsDetailVo() {
ProductReqSpecsDetailVo target = new ProductReqSpecsDetailVo();
BeanUtils.copyProperties(this, target);
return target;
}
}

View File

@ -0,0 +1,32 @@
package com.microservices.pms.product.domain.vo;
import com.alibaba.fastjson2.JSONObject;
import com.microservices.pms.project.domain.PmsProject;
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 ProductReqSpecsDetailVo extends ProductReqSpecsDataVo {
@ApiModelProperty(value = "正文")
private String content;
@ApiModelProperty(value = "附件列表")
private List<SysFileInfo> fileList;
@ApiModelProperty(value = "关联计划(原项目需求)")
private JSONObject projectIssue;
@ApiModelProperty(value = "关联项目")
private PmsProject project;
}

View File

@ -0,0 +1,48 @@
package com.microservices.pms.product.domain.vo;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotNull;
import java.util.List;
/**
* 产品需求对象 pms_product_requirement
*
* @author otto
* @date 2023-10-10
*/
@Data
@ApiModel("用户需求搜索对象")
public class ProductReqSpecsSearchVo {
/**
* 标题
*/
@ApiModelProperty(value = "模糊搜索标题")
private String title;
/**
* 关联产品模块标识
*/
@ApiModelProperty(value = "关联产品标识", required = true)
@NotNull
private String pmsProductIdentifier;
/**
* 关联产品模块ID
*/
@ApiModelProperty(value = "关联产品模块ID传0查询不属于任何模块的需求")
private Long pmsProductModuleId;
@ApiModelProperty(value = "产品需求状态(全部状态请传空)")
private String status;
/**
* 关联项目ID
*/
@ApiModelProperty(value = "关联模块ID", hidden = true)
@JsonInclude(JsonInclude.Include.NON_EMPTY)
private List<Long> childrenModuleIdList;
}

View File

@ -1,12 +1,15 @@
package com.microservices.pms.product.domain.vo;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.microservices.common.core.utils.bean.BeanUtils;
import com.microservices.pms.product.domain.PmsProductModule;
import com.microservices.pms.project.domain.vo.BaseEntityVo;
import com.microservices.pms.product.domain.enums.CommonEnumType;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* 产品需求对象 pms_product_requirement
*
@ -15,15 +18,14 @@ import lombok.Data;
*/
@Data
@ApiModel("用户需求数据对象")
public class ProductUserReqDataVo extends BaseEntityVo {
public class ProductUserReqDataVo {
private Long id;
@ApiModelProperty(value = "标题")
private String title;
@ApiModelProperty(value = "需求状态")
private String status;
private CommonEnumType status;
@ApiModelProperty(value = "从属产品模块")
private PmsProductModule pmsProductModule;
@ -34,6 +36,10 @@ public class ProductUserReqDataVo extends BaseEntityVo {
@ApiModelProperty(value = "需求来源单位")
private String sourceCompany;
@ApiModelProperty(value = "需求提出时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
private Date createTime;
public ProductUserReqDetailVo toProductReqUserDetailVo() {
ProductUserReqDetailVo target = new ProductUserReqDetailVo();
BeanUtils.copyProperties(this, target);

View File

@ -1,7 +1,5 @@
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;
@ -30,9 +28,6 @@ public class ProductUserReqSearchVo {
@NotNull
private String pmsProductIdentifier;
public PmsProductRequirement toPmsProductRequirement() {
PmsProductRequirement target = new PmsProductRequirement();
BeanUtils.copyProperties(this, target);
return target;
}
@ApiModelProperty(value = "产品需求状态(全部状态请传空)")
private String status;
}

View File

@ -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.ProductReqSpecsSearchVo;
import com.microservices.pms.product.domain.vo.ProductUserReqSearchVo;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
@ -105,4 +106,6 @@ public interface PmsProductRequirementMapper
List<String> selectProductIdentifierListInRequirementIdList(@Param("idList") List<Long> idList);
List<PmsProductRequirement> selectUserReqList(ProductUserReqSearchVo productUserReqSearchVo);
List<PmsProductRequirement> selectReqSpecsList(ProductReqSpecsSearchVo productReqSpecsSearchVo);
}

View File

@ -138,7 +138,7 @@ public interface IPmsProductRequirementService
* @param productUserReqSearchVo 查询条件
* @return 用户需求列表
*/
GenericsTableDataInfo<ProductUserReqDataVo> selectUserReqList(String enterpriseIdentifier, ProductUserReqSearchVo productUserReqSearchVo);
GenericsTableDataInfo<ProductUserReqDataVo> selectUserReqList(ProductUserReqSearchVo productUserReqSearchVo);
ProductUserReqDetailVo selectUserReqDetailById(Long id);
@ -149,4 +149,8 @@ public interface IPmsProductRequirementService
int deleteUserReqByIds(Long[] ids);
int reviewUserReq(ProductUserReqReviewVo productUserReqReviewVo);
GenericsTableDataInfo<ProductReqSpecsDataVo> selectReqSpecsList(ProductReqSpecsSearchVo productReqSpecsSearchVo);
ProductReqSpecsDetailVo selectReqSpecsDetailById(Long id);
}

View File

@ -24,6 +24,7 @@ import com.microservices.pms.product.mapper.PmsProductRequirementMapper;
import com.microservices.pms.product.service.*;
import com.microservices.pms.project.domain.PmsProject;
import com.microservices.pms.project.service.IPmsProjectService;
import com.microservices.pms.project.service.PmsProjectIssuesService;
import com.microservices.pms.utils.PmsConstants;
import com.microservices.pms.utils.PmsUtils;
import com.microservices.system.api.domain.SysUser;
@ -67,6 +68,8 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
@Autowired
private IPmsProjectService pmsProjectService;
@Autowired
private PmsProjectIssuesService pmsProjectIssuesService;
@Autowired
@Lazy
private IPmsJournalsService pmsJournalsService;
@ -180,7 +183,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
@Override
public GenericsTableDataInfo<ProductUserReqDataVo> selectUserReqList(String enterpriseIdentifier, ProductUserReqSearchVo productUserReqSearchVo) {
public GenericsTableDataInfo<ProductUserReqDataVo> selectUserReqList(ProductUserReqSearchVo productUserReqSearchVo) {
pmsProductService.selectPmsProductByIdentifier(productUserReqSearchVo.getPmsProductIdentifier());
startPage();
List<PmsProductRequirement> userReqList = pmsProductRequirementMapper.selectUserReqList(productUserReqSearchVo);
@ -190,7 +193,7 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
private ProductUserReqDataVo toProductUserReqDataVo(PmsProductRequirement pmsProductRequirement) {
ProductUserReqDataVo productUserReqDataVo = pmsProductRequirement.toProductUserReqDataVo();
// 设置状态
productUserReqDataVo.setStatus(ProductReqStatus.getNameByKey(pmsProductRequirement.getStatus()));
productUserReqDataVo.setStatus(ProductReqStatus.getTypeByKey(pmsProductRequirement.getStatus()));
return productUserReqDataVo;
}
@ -284,6 +287,60 @@ public class PmsProductRequirementServiceImpl implements IPmsProductRequirementS
return updateRequirement(userReq, userReq.getPmsProductIdentifier());
}
@Override
public GenericsTableDataInfo<ProductReqSpecsDataVo> selectReqSpecsList(ProductReqSpecsSearchVo productReqSpecsSearchVo) {
pmsProductService.selectPmsProductByIdentifier(productReqSpecsSearchVo.getPmsProductIdentifier());
if (productReqSpecsSearchVo.getPmsProductModuleId() != null && productReqSpecsSearchVo.getPmsProductModuleId() != 0) {
List<Long> moduleIdList = pmsProductModuleService.selectChildrenPmsProductModuleIdList(productReqSpecsSearchVo.getPmsProductModuleId());
productReqSpecsSearchVo.setChildrenModuleIdList(moduleIdList);
}
startPage();
List<PmsProductRequirement> userReqList = pmsProductRequirementMapper.selectReqSpecsList(productReqSpecsSearchVo);
HashMap<String, Object> hashMap = new HashMap<>();
return PageUtils.toPage(userReqList, x -> toProductReqSpecsDataVo(x, hashMap));
}
private ProductReqSpecsDataVo toProductReqSpecsDataVo(PmsProductRequirement pmsProductRequirement, HashMap<String, Object> hashMap) {
ProductReqSpecsDataVo productReqSpecsDataVo = pmsProductRequirement.toProductReqSpecsDataVo();
// 设置状态
productReqSpecsDataVo.setStatus(ProductReqStatus.getTypeByKey(pmsProductRequirement.getStatus()));
// 设置产品模块
if (pmsProductRequirement.getPmsProductModuleId() != null) {
productReqSpecsDataVo.setPmsProductModule(
PmsUtils.getSelectObjectInCache(
hashMap
, x -> pmsProductModuleService.selectPmsProductModuleById(x, false)
, pmsProductRequirement.getPmsProductModuleId())
);
}
return productReqSpecsDataVo;
}
@Override
public ProductReqSpecsDetailVo selectReqSpecsDetailById(Long id) {
PmsProductRequirement pmsProductRequirement = selectPmsProductRequirementById(id, false);
return toProductReqSpecsDetailVo(pmsProductRequirement);
}
private ProductReqSpecsDetailVo toProductReqSpecsDetailVo(PmsProductRequirement pmsProductRequirement) {
ProductReqSpecsDataVo productReqSpecsDataVo = toProductReqSpecsDataVo(pmsProductRequirement, null);
ProductReqSpecsDetailVo productReqSpecsDetailVo = productReqSpecsDataVo.toProductReqSpecsDetailVo();
productReqSpecsDetailVo.setContent(pmsProductRequirement.getContent());
// 设置文件列表
productReqSpecsDetailVo.setFileList(pmsCommonService.getAllFileByFileIdentifiers(pmsProductRequirement.getFileIdentifiers())
);
if (pmsProductRequirement.getPmsProjectId() != null) {
productReqSpecsDetailVo.setProject(pmsProjectService.selectAndCheckPmsProjectById(pmsProductRequirement.getPmsProjectId()));
if (pmsProductRequirement.getProjectReqId() != null) {
productReqSpecsDetailVo.setProjectIssue(
pmsProjectIssuesService.selectPmsProjectIssueById(pmsProductRequirement.getProjectReqId(), pmsProductRequirement.getPmsProjectId()));
}
}
return productReqSpecsDetailVo;
}
/**
* 删除产品需求信息

View File

@ -1,31 +1,31 @@
<?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">
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.microservices.pms.product.mapper.PmsProductRequirementMapper">
<resultMap type="com.microservices.pms.product.domain.PmsProductRequirement" id="PmsProductRequirementResult">
<result property="id" column="id" />
<result property="index" column="index" />
<result property="title" column="title" />
<result property="id" column="id"/>
<result property="index" column="index"/>
<result property="title" column="title"/>
<result property="status" column="status"/>
<result property="priorityId" column="priority_id" />
<result property="pmsProductModuleId" column="pms_product_module_id" />
<result property="pmsProductPlanId" column="pms_product_plan_id" />
<result property="pmsProductIdentifier" column="pms_product_identifier" />
<result property="content" column="content" />
<result property="tagIds" column="tag_ids" />
<result property="startTime" column="start_time" />
<result property="endTime" column="end_time" />
<result property="priorityId" column="priority_id"/>
<result property="pmsProductModuleId" column="pms_product_module_id"/>
<result property="pmsProductPlanId" column="pms_product_plan_id"/>
<result property="pmsProductIdentifier" column="pms_product_identifier"/>
<result property="content" column="content"/>
<result property="tagIds" column="tag_ids"/>
<result property="startTime" column="start_time"/>
<result property="endTime" column="end_time"/>
<result property="fileIdentifiers" column="file_identifiers"/>
<result property="sort" column="sort" />
<result property="updateTime" column="update_time" />
<result property="updateBy" column="update_by" />
<result property="createTime" column="create_time" />
<result property="createBy" column="create_by" />
<result property="delFlag" column="del_flag" />
<result property="sort" column="sort"/>
<result property="updateTime" column="update_time"/>
<result property="updateBy" column="update_by"/>
<result property="createTime" column="create_time"/>
<result property="createBy" column="create_by"/>
<result property="delFlag" column="del_flag"/>
<result property="requirementAssigneeGitlinkIds" column="requirement_assignee_gitlink_ids"/>
<result property="pmsProjectId" column="pms_project_id" />
<result property="pmsProjectId" column="pms_project_id"/>
<result property="fromId" column="from_id"/>
<result property="projectReqId" column="project_req_id"/>
<result property="type" column="type"/>
@ -65,7 +65,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
from pms_product_requirement
</sql>
<select id="selectPmsProductRequirementList" parameterType="PmsProductRequirement" resultMap="PmsProductRequirementResult">
<select id="selectPmsProductRequirementList" parameterType="PmsProductRequirement"
resultMap="PmsProductRequirementResult">
/*keep orderby*/
<include refid="selectPmsProductRequirementVo"/>
<include refid="selectWhere"/>
@ -78,21 +79,21 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<sql id="selectWhere">
<where>
<if test="title != null and title != ''"> and title like concat('%', #{title}, '%')</if>
<if test="priorityId != null "> and priority_id = #{priorityId}</if>
<if test="pmsProductPlanId != null "> and pms_product_plan_id = #{pmsProductPlanId}</if>
<if test="pmsProductIdentifier != null "> and pms_product_identifier = #{pmsProductIdentifier}</if>
<if test="content != null and content != ''"> and content = #{content}</if>
<if test="title != null and title != ''">and title like concat('%', #{title}, '%')</if>
<if test="priorityId != null ">and priority_id = #{priorityId}</if>
<if test="pmsProductPlanId != null ">and pms_product_plan_id = #{pmsProductPlanId}</if>
<if test="pmsProductIdentifier != null ">and pms_product_identifier = #{pmsProductIdentifier}</if>
<if test="content != null and content != ''">and content = #{content}</if>
<if test="tagId != null and tagId != ''">and FIND_IN_SET(#{tagId},tag_ids)</if>
<if test="createBy != null and createBy != ''"> and create_by = #{createBy}</if>
<if test="startTime != null "> and start_time = #{startTime}</if>
<if test="endTime != null "> and end_time = #{endTime}</if>
<if test="createBy != null and createBy != ''">and create_by = #{createBy}</if>
<if test="startTime != null ">and start_time = #{startTime}</if>
<if test="endTime != null ">and end_time = #{endTime}</if>
<if test="fileIdentifiers != null and fileIdentifiers != ''">and file_identifiers = #{fileIdentifiers}</if>
<if test="sort != null "> and sort = #{sort}</if>
<if test="sort != null ">and sort = #{sort}</if>
<if test="requirementAssigneeGitlinkId != null and requirementAssigneeGitlinkId != ''">
and FIND_IN_SET(#{requirementAssigneeGitlinkId},requirement_assignee_gitlink_ids)
</if>
<if test="pmsProjectId != null and pmsProjectId != ''"> and pms_project_id = #{pmsProjectId}</if>
<if test="pmsProjectId != null and pmsProjectId != ''">and pms_project_id = #{pmsProjectId}</if>
<if test="productIdentifierList != null">
and pms_product_identifier in
<foreach item="productIdentifier" collection="productIdentifierList" open="(" separator="," close=")">
@ -118,13 +119,15 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</where>
</sql>
<select id="selectPmsProductRequirementById" parameterType="Long" resultMap="PmsProductRequirementResult">
<include refid="selectPmsProductRequirementVo"/>
where id = #{id}
</select>
<select id="selectPmsProductRequirementMaxIndexByProductIdentifier" resultType="java.lang.Long">
select max(`index`) from pms_product_requirement where pms_product_identifier = #{pmsProductIdentifier}
select max(`index`)
from pms_product_requirement
where pms_product_identifier = #{pmsProductIdentifier}
</select>
<select id="selectPmsProductRequirementByProductIdentifierAndIndex" resultMap="PmsProductRequirementResult">
<include refid="selectPmsProductRequirementVo"/>
@ -149,12 +152,42 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
)
</if>
<if test="pmsProductIdentifier != null ">and pms_product_identifier = #{pmsProductIdentifier}</if>
<if test="status != null and status != ''">and `status` = #{status}</if>
and (`status`= 'pendingReviewUserReq' or `status`= 'rejectedUserReq' or `status` = 'reviewedUserReq')
</where>
order by update_time desc
</select>
<select id="selectReqSpecsList" resultMap="PmsProductRequirementResult">
/*keep orderby*/
<include refid="selectPmsProductRequirementVo"/>
<where>
<if test="title != null and title != ''">and title like concat('%', #{title}, '%')</if>
<if test="pmsProductIdentifier != null ">and pms_product_identifier = #{pmsProductIdentifier}</if>
<if test="status != null and status != ''">and `status` = #{status}</if>
<choose>
<when test="childrenModuleIdList != null">
<if test="childrenModuleIdList != null ">
and pms_product_module_id in
<foreach item="moduleId" collection="childrenModuleIdList" open="(" separator="," close=")">
#{moduleId}
</foreach>
</if>
</when>
<otherwise>
<if test="pmsProductModuleId != null ">
<if test="pmsProductModuleId != 0">and pms_product_module_id = #{pmsProductModuleId}</if>
<if test="pmsProductModuleId == 0">and pms_product_module_id is null</if>
</if>
</otherwise>
</choose>
and (`status`= 'pendingReviewReqSpecs' or `status`= 'plannedReqSpecs' or `status` = 'rejectedReqSpecs' or
`status` = 'reviewedReqSpecs' or `status` = 'completedReqSpecs')
</where>
order by update_time desc
</select>
<insert id="insertPmsProductRequirement" parameterType="PmsProductRequirement" useGeneratedKeys="true" keyProperty="id">
<insert id="insertPmsProductRequirement" parameterType="PmsProductRequirement" useGeneratedKeys="true"
keyProperty="id">
insert into pms_product_requirement
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="index != null">`index`,</if>
@ -183,7 +216,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<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>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="index != null">#{index},</if>
<if test="title != null and title != ''">#{title},</if>
@ -211,7 +244,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<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>
</trim>
</insert>
<update id="updatePmsProductRequirement" parameterType="PmsProductRequirement">
@ -267,11 +300,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</update>
<delete id="deletePmsProductRequirementById" parameterType="Long">
delete from pms_product_requirement where id = #{id}
delete
from pms_product_requirement
where id = #{id}
</delete>
<delete id="deletePmsProductRequirementByIds" parameterType="String">
delete from pms_product_requirement where id in
delete from pms_product_requirement where id in
<foreach item="id" collection="array" open="(" separator="," close=")">
#{id}
</foreach>