bug修复等

This commit is contained in:
2025-11-19 09:49:12 +08:00
parent c9e6f781fa
commit 06234bbcc1
18 changed files with 852 additions and 337 deletions

View File

@@ -1,16 +1,30 @@
package com.sa.zentao.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.data.HyperlinkData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageInfo;
import com.sa.zentao.dao.*;
import com.sa.zentao.entity.ZtProject;
import com.sa.zentao.entity.ZtProjectproduct;
import com.sa.zentao.entity.ZtStoryFeedback;
import com.sa.zentao.enums.StoryStageEnums;
import com.sa.zentao.enums.StoryStatusEnums;
import com.sa.zentao.enums.UserStoryEnums;
import com.sa.zentao.qo.SearchQo;
import com.sa.zentao.qo.StoryQo;
import com.sa.zentao.qo.ZtProjectQo;
import com.sa.zentao.service.IZtProjectproductService;
import com.sa.zentao.service.IZtStoryFeedbackService;
import com.sa.zentao.service.IZtStoryService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
@@ -18,7 +32,9 @@ import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
@@ -39,14 +55,119 @@ public class ZtStoryController {
@Autowired
private IZtProjectproductService projectproductService;
@Autowired
private IZtStoryFeedbackService storyFeedbackService;
@Value("${file.backUrl}")
private String url;
@RequestMapping(value = "/pageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public Result<ZtStoryDTO> storyPageList(@RequestBody ZtProjectQo qo){
return Result.success(ztStoryService.pageList(qo));
}
@RequestMapping(value = "/storyExport", method = RequestMethod.POST)
public void storyExport(@RequestBody ZtProjectQo qo, jakarta.servlet.ServletResponse response){
qo.setPageSize(1000000);
PageInfo<ZtStoryDTO> p = ztStoryService.pageList(qo);
List<ZtStoryDTO> list = p.getList();
List<Integer> feedbackIds = list.stream().filter(o -> o.getFeedback() != null && o.getFeedback() != 0).map(o -> o.getFeedback()).collect(Collectors.toList());
Map<Integer, ZtStoryFeedback> feedbackMap= CollectionUtils.isEmpty(feedbackIds)?new HashMap<Integer,ZtStoryFeedback>(): this.storyFeedbackService.listByIds(feedbackIds).stream().collect(Collectors.toMap(ZtStoryFeedback::getId, o->o));
for (ZtStoryDTO ztStoryUserDTO : list) {
ZtStoryFeedback ztStoryFeedback = feedbackMap.get(ztStoryUserDTO.getFeedback());
if (ztStoryFeedback != null) {
String reName=ztStoryFeedback.getId()+":"+ztStoryFeedback.getSpec();
String reUrl = url+"/#/product-feedback-info/"+ztStoryFeedback.getId();
WriteCellData<String> hyperlink = new WriteCellData<>(reName);
HyperlinkData hyperlinkData = new HyperlinkData();
try {
hyperlinkData.setAddress(reUrl.replace(" ", "%20"));
hyperlinkData.setHyperlinkType(HyperlinkData.HyperlinkType.URL);
hyperlink.setHyperlinkData(hyperlinkData);
ztStoryUserDTO.setFeedbackSpecUrl(hyperlink );
} catch (Exception e) {
ztStoryUserDTO.setFeedbackSpecUrl(null);
}
}
if(ztStoryUserDTO.getParent()!=null&&ztStoryUserDTO.getParent()!=0){
String reName = ztStoryUserDTO.getParent()+":"+ztStoryUserDTO.getParentName();
String reUrl = url+"/#/product-story-info/"+ztStoryUserDTO.getParent();
WriteCellData<String> hyperlink = new WriteCellData<>(reName);
HyperlinkData hyperlinkData = new HyperlinkData();
try {
hyperlinkData.setAddress(reUrl.replace(" ", "%20"));
hyperlinkData.setHyperlinkType(HyperlinkData.HyperlinkType.URL);
hyperlink.setHyperlinkData(hyperlinkData);
ztStoryUserDTO.setParentNameUrl(hyperlink);
} catch (Exception e) {
ztStoryUserDTO.setParentNameUrl(null);
}
}
if(ztStoryUserDTO.getUserStory()!=null&&ztStoryUserDTO.getUserStory()!=0){
String reName=ztStoryUserDTO.getUserStory()+":"+ztStoryUserDTO.getUserStoryName();
String reUrl = url+"/#/product-user-story-info/"+ztStoryUserDTO.getUserStory();
WriteCellData<String> hyperlink = new WriteCellData<>(reName);
HyperlinkData hyperlinkData = new HyperlinkData();
try {
hyperlinkData.setAddress(reUrl.replace(" ", "%20"));
hyperlinkData.setHyperlinkType(HyperlinkData.HyperlinkType.URL);
hyperlink.setHyperlinkData(hyperlinkData);
ztStoryUserDTO.setUserStoryNameUrl(hyperlink);
} catch (Exception e) {
ztStoryUserDTO.setUserStoryNameUrl(null);
}
}
String reName=ztStoryUserDTO.getId()+":"+ztStoryUserDTO.getTitle();
String reUrl = url+"/#/product-story-info/"+ztStoryUserDTO.getId();
WriteCellData<String> hyperlink = new WriteCellData<>(reName);
HyperlinkData hyperlinkData = new HyperlinkData();
try {
hyperlinkData.setAddress(reUrl.replace(" ", "%20"));
hyperlinkData.setHyperlinkType(HyperlinkData.HyperlinkType.URL);
hyperlink.setHyperlinkData(hyperlinkData);
ztStoryUserDTO.setStoryUrl(hyperlink);
} catch (Exception e) {
ztStoryUserDTO.setStoryUrl(null);
}
if(!StringUtils.isEmpty(ztStoryUserDTO.getReviewedbyName())){
ztStoryUserDTO.setReviewedbyName(ztStoryUserDTO.getReviewedbyName().replaceAll(",",""));
}
ztStoryUserDTO.setStatus(StoryStatusEnums.transfer(ztStoryUserDTO.getStatus())==null?null:StoryStatusEnums.transfer(ztStoryUserDTO.getStatus()).getDesc());
ztStoryUserDTO.setStage(StoryStageEnums.transfer(ztStoryUserDTO.getStage())==null?null:StoryStageEnums.transfer(ztStoryUserDTO.getStage()).getDesc());
if(ztStoryUserDTO.getYsFlag()!=null&&ztStoryUserDTO.getYsFlag()!=0){
ztStoryUserDTO.setYsFlagName(ztStoryUserDTO.getYsFlag()==1?"通过":"不通过");
}
if(!StringUtils.isEmpty(ztStoryUserDTO.getUserStoryName())){
ztStoryUserDTO.setUserStoryName(ztStoryUserDTO.getUserStoryId()+":"+ztStoryUserDTO.getUserStoryName());
}
if(ztStoryUserDTO.getParent()!=null&&ztStoryUserDTO.getParent()!=0){
ztStoryUserDTO.setParentName(ztStoryUserDTO.getParent()+":"+ztStoryUserDTO.getParentName());
}
}
ExcelWriter excelWriter = null;
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
try {
excelWriter = EasyExcel.write(response.getOutputStream())
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.needHead(Boolean.TRUE).build();
WriteSheet writeSheet = EasyExcel.writerSheet(0, "sheet1")
.head(ZtStoryDTO.class)
.needHead(Boolean.TRUE).build();
excelWriter.write(list, writeSheet);
excelWriter.finish();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@RequestMapping(value = "/projectStoryPageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public Result<ZtStoryDTO> projectStoryPageList(@RequestBody ZtProjectQo qo){

View File

@@ -1,22 +1,38 @@
package com.sa.zentao.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.metadata.data.HyperlinkData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageInfo;
import com.sa.zentao.dao.Result;
import com.sa.zentao.dao.ZtStoryDTO;
import com.sa.zentao.dao.ZtStoryFeedbackDTO;
import com.sa.zentao.dao.ZtStoryUserDTO;
import com.sa.zentao.entity.ZtStoryFeedback;
import com.sa.zentao.enums.FeedbackStatusEnums;
import com.sa.zentao.enums.StoryStageEnums;
import com.sa.zentao.enums.StoryStatusEnums;
import com.sa.zentao.qo.ZtProjectQo;
import com.sa.zentao.service.IZtStoryFeedbackService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* <p>
@@ -33,11 +49,74 @@ public class ZtStoryFeedbackController {
@Autowired
private IZtStoryFeedbackService storyFeedbackService;
@Value("${file.backUrl}")
private String url;
@RequestMapping(value = "/pageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public Result<ZtStoryFeedbackDTO> storyPageList(@RequestBody ZtProjectQo qo){
return Result.success(storyFeedbackService.pageList(qo));
}
@RequestMapping(value = "/storyExport", method = RequestMethod.POST)
public void storyExport(@RequestBody ZtProjectQo qo, jakarta.servlet.ServletResponse response){
qo.setPageSize(1000000);
PageInfo<ZtStoryFeedbackDTO> p = storyFeedbackService.pageList(qo);
List<ZtStoryFeedbackDTO> list = p.getList();
for (ZtStoryFeedbackDTO ztStoryUserDTO : list) {
FeedbackStatusEnums feedbackStatusEnums = FeedbackStatusEnums.transferType(ztStoryUserDTO.getStatus());
if(feedbackStatusEnums!=null){
ztStoryUserDTO.setStatus(feedbackStatusEnums.getValue());
}
if(!StringUtils.isEmpty(ztStoryUserDTO.getOpenSource())){
ztStoryUserDTO.setOpenSource("weixin".equals(ztStoryUserDTO.getOpenSource())?"微信":"");
}
Integer type = ztStoryUserDTO.getType();
String typeName=null;
if(type==1){
typeName="bug修复";
}else if(type==2){
typeName="改进意见";
}else if(type==3){
typeName="其他";
}
ztStoryUserDTO.setTypeName(typeName);
String reName=ztStoryUserDTO.getId()+":"+ztStoryUserDTO.getSpec();
String reUrl = url+"/#/product-feedback-info/"+ztStoryUserDTO.getId();
WriteCellData<String> hyperlink = new WriteCellData<>(reName);
HyperlinkData hyperlinkData = new HyperlinkData();
try {
hyperlinkData.setAddress(reUrl.replace(" ", "%20"));
hyperlinkData.setHyperlinkType(HyperlinkData.HyperlinkType.URL);
hyperlink.setHyperlinkData(hyperlinkData);
ztStoryUserDTO.setFeedbackUrl(hyperlink);
} catch (Exception e) {
ztStoryUserDTO.setFeedbackUrl(null);
}
}
ExcelWriter excelWriter = null;
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
try {
excelWriter = EasyExcel.write(response.getOutputStream())
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.needHead(Boolean.TRUE).build();
WriteSheet writeSheet = EasyExcel.writerSheet(0, "sheet1")
.head(ZtStoryFeedbackDTO.class)
.needHead(Boolean.TRUE).build();
excelWriter.write(list, writeSheet);
excelWriter.finish();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@RequestMapping(value = "/getFeedbackById", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public Result<ZtStoryFeedbackDTO> getFeedbackById(@RequestBody ZtProjectQo qo){
return Result.success(storyFeedbackService.getFeedbackById(qo));

View File

@@ -1,12 +1,14 @@
package com.sa.zentao.controller;
import com.alibaba.excel.EasyExcel;
import com.alibaba.excel.ExcelWriter;
import com.alibaba.excel.write.metadata.WriteSheet;
import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageInfo;
import com.sa.zentao.dao.Result;
import com.sa.zentao.dao.ZtStoryDTO;
import com.sa.zentao.dao.ZtStoryUserDTO;
import com.sa.zentao.dao.*;
import com.sa.zentao.entity.ZtStory;
import com.sa.zentao.entity.ZtStoryUser;
import com.sa.zentao.enums.UserStoryEnums;
@@ -19,6 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
@@ -59,7 +62,7 @@ public class ZtStoryUserController {
storyUserService.addStory(dto);
return Result.success();
}
@RequestMapping(value = "/getKanban", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
@RequestMapping(value = "/getKanban", method = RequestMethod.GET, produces = "application/json; charset=UTF-8")
public Result getKanban(@RequestParam(name = "productId",required = true) Integer productId){
return Result.success(storyUserService.getKanban(productId));
}
@@ -80,6 +83,36 @@ public class ZtStoryUserController {
return Result.success(p);
}
@RequestMapping(value = "/export", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public void export(@RequestBody StoryQo qo, jakarta.servlet.ServletResponse response){
qo.setPageSize(1000000);
PageInfo<ZtStoryUserDTO> p = storyUserService.pageList(qo);
List<ZtStoryUserDTO> list = p.getList();
for (ZtStoryUserDTO ztStoryUserDTO : list) {
if(!StringUtils.isEmpty(ztStoryUserDTO.getReviewedbyName())){
ztStoryUserDTO.setReviewedbyName(ztStoryUserDTO.getReviewedbyName().replaceAll(",",""));
}
ztStoryUserDTO.setStatus(UserStoryEnums.transfer(ztStoryUserDTO.getStatus())==null?null:UserStoryEnums.transfer(ztStoryUserDTO.getStatus()).getValue());
}
ExcelWriter excelWriter = null;
response.setContentType("application/vnd.ms-excel;charset=UTF-8");
try {
excelWriter = EasyExcel.write(response.getOutputStream())
.registerWriteHandler(new LongestMatchColumnWidthStyleStrategy())
.needHead(Boolean.TRUE).build();
WriteSheet writeSheet = EasyExcel.writerSheet(0, "sheet1")
.head(ZtStoryUserDTO.class)
.needHead(Boolean.TRUE).build();
excelWriter.write(list, writeSheet);
excelWriter.finish();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
@RequestMapping(value = "/storyList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public Result storyList(@RequestBody StoryQo qo){
LambdaQueryWrapper<ZtStoryUser> eq = new QueryWrapper<ZtStoryUser>()

View File

@@ -1,5 +1,8 @@
package com.sa.zentao.dao;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
@@ -28,59 +31,145 @@ public class ZtStoryDTO implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
@ExcelProperty(value = "ID",index =0)
private Integer id;
private List<Integer> idList;
private String vision;
private Integer parent;
private String parentName;
private Integer product;
private Integer productId;
private String productName;
private String projectName;
private Integer projectId;
private String implementName;
private Integer implementId;
private Integer branch;
private Integer module;
private String moduleName;
private String plan;
private String source;
@TableField("sourceNote")
private String sourceNote;
@TableField("fromBug")
private Integer frombug;
private Integer feedback;
private String feedbackSpec;
@ExcelProperty(value = "研发需求名称",index =1)
private String title;
private String keywords;
private String type;
private String category;
@ExcelProperty(value = "P",index =2)
private Integer pri;
private Float estimate;
@ExcelProperty(value = "迭代名称",index =3)
private String executionName;
// private List<ZtProjectDTO> executionList;
@ExcelProperty(value = "状态",index =4)
private String status;
@TableField("subStatus")
private String substatus;
@ExcelProperty(value = "期望完成时间",index =5)
private Date planEndDate;
@ExcelProperty(value = "阶段",index =6)
private String stage;
@ExcelProperty(value = "指派给",index =7)
private String assignedToName;
//验收人
@ExcelProperty(value = "验收人",index =8)
private String ysUserName;
//1通过 2不通过
@ExcelIgnore
private Integer ysFlag;
//1通过 2不通过
@ExcelProperty(value = "验收状态",index =9)
private String ysFlagName;
@ExcelProperty(value = "创建者",index =10)
private String openedbyName;
@ExcelProperty(value = "创建日期",index =11)
private Date openeddate;
//验收人
// @ExcelProperty(value = "验收人",index =12)
@ExcelIgnore
private String ysUser;
@ExcelIgnore
private String reviewedby;
@ExcelProperty(value = "评审人",index =12)
private String reviewedbyName;
@ExcelProperty(value = "更新日期",index =13)
private Date lastediteddate;
@ExcelProperty(value = "由谁关闭",index =14)
private String closedbyName;
@ExcelIgnore
private String closedby;
@ExcelProperty(value = "关闭原因",index =15)
private String closedreason;
@ExcelProperty(value = "用户需求名称",index =16)
private WriteCellData<String> userStoryNameUrl;
@ExcelProperty(value = "用户需求提交人",index =17)
private String userStoryCreateUser;
@ExcelProperty(value = "用户需求创建时间",index =18)
private Date userStoryCreateTime;
@ExcelIgnore
private String userStoryName;
@ExcelProperty(value = "父需求",index =19)
private WriteCellData<String> parentNameUrl;
@ExcelIgnore
private String parentName;
@ExcelProperty(value = "问题反馈",index =20)
private WriteCellData<String> feedbackSpecUrl;
@ExcelProperty(value = "需求链接",index =21)
private WriteCellData<String> storyUrl;
@ExcelIgnore
private String feedbackSpec;
@ExcelIgnore
private Date closeddate;
@ExcelIgnore
private Integer userStoryId;
@ExcelIgnore
private String revieweUser;
@ExcelIgnore
private List<Integer> idList;
@ExcelIgnore
private String vision;
@ExcelIgnore
private Integer parent;
@ExcelIgnore
private Integer product;
@ExcelIgnore
private Integer productId;
@ExcelIgnore
private String productName;
@ExcelIgnore
private String projectName;
@ExcelIgnore
private Integer projectId;
@ExcelIgnore
private String implementName;
@ExcelIgnore
private Integer implementId;
@ExcelIgnore
private Integer branch;
@ExcelIgnore
private Integer module;
@ExcelIgnore
private String moduleName;
@ExcelIgnore
private String plan;
@ExcelIgnore
private String source;
@ExcelIgnore
private String sourceNote;
@ExcelIgnore
private Integer frombug;
@ExcelIgnore
private Integer feedback;
@ExcelIgnore
private String keywords;
@ExcelIgnore
private String type;
@ExcelIgnore
private String category;
@ExcelIgnore
private Float estimate;
@ExcelIgnore
private String substatus;
@ExcelIgnore
private String color;
//
// {key:'研发中',value:'developing'}
@@ -90,188 +179,153 @@ public class ZtStoryDTO implements Serializable {
// ,{key:'已验收',value:'verified'}
// ,{key:'已发布',value:'released'}
// ,{key:'已关闭',value:'closed'}
private String stage;
@TableField("stagedBy")
@ExcelIgnore
private String stagedby;
@ExcelIgnore
private String mailto;
@ExcelIgnore
private Integer lib;
@TableField("fromStory")
@ExcelIgnore
private Integer fromstory;
@TableField("fromVersion")
@ExcelIgnore
private Integer fromversion;
@TableField("openedBy")
@ExcelIgnore
private String openedby;
private String openedbyName;
@TableField("openedDate")
private Date openeddate;
@TableField("assignedTo")
@ExcelIgnore
private String assignedTo;
private String assignedToName;
@TableField("assignedDate")
@ExcelIgnore
private Date assigneddate;
@TableField("approvedDate")
@ExcelIgnore
private Date approveddate;
@TableField("lastEditedBy")
@ExcelIgnore
private String lasteditedby;
@TableField("lastEditedDate")
private Date lastediteddate;
@TableField("changedBy")
@ExcelIgnore
private String changedby;
@TableField("changedDate")
@ExcelIgnore
private Date changeddate;
@TableField("reviewedBy")
private String reviewedby;
private String reviewedbyName;
private String revieweUser;
@ExcelIgnore
private Integer revieweResult;
@TableField("reviewedDate")
@ExcelIgnore
private Date revieweddate;
@TableField("releasedDate")
@ExcelIgnore
private Date releaseddate;
@ExcelIgnore
private Date planYsDate;
@TableField("closedBy")
private String closedby;
@TableField("closedDate")
private Date closeddate;
@TableField("closedReason")
private String closedreason;
@TableField("activatedDate")
@ExcelIgnore
private Date activateddate;
@TableField("toBug")
@ExcelIgnore
private Integer tobug;
@TableField("childStories")
@ExcelIgnore
private String childstories;
@TableField("linkStories")
@ExcelIgnore
private String linkstories;
@TableField("linkRequirements")
@ExcelIgnore
private String linkrequirements;
@ExcelIgnore
private String twins;
@TableField("duplicateStory")
@ExcelIgnore
private Integer duplicatestory;
@ExcelIgnore
private Integer version;
@TableField("storyChanged")
@ExcelIgnore
private String storychanged;
@TableField("feedbackBy")
@ExcelIgnore
private String feedbackby;
@TableField("notifyEmail")
@ExcelIgnore
private String notifyemail;
@TableField("BSA")
@ExcelIgnore
private String bsa;
@ExcelIgnore
private String duration;
@ExcelIgnore
private Integer demand;
//描述
@ExcelIgnore
private String desc;
@TableField("submitedBy")
@ExcelIgnore
private String submitedby;
@ExcelIgnore
private String roadmap;
@TableField("URChanged")
@ExcelIgnore
private String urchanged;
@ExcelIgnore
private String deleted;
@ExcelIgnore
private List<String> userViewId;
@ExcelIgnore
private String remark;
@ExcelIgnore
private List<ZtStoryreviewDTO> views;
@ExcelIgnore
private String fileUrl;
@ExcelIgnore
private String verify;
@ExcelIgnore
private String spec;
//计划开始时间
@ExcelIgnore
private Date planStartDate;
//计划结束时间
private Date planEndDate;
//开始日期
@ExcelIgnore
private Date startDate;
//结束日期
@ExcelIgnore
private Date endDate;
@ExcelIgnore
private Integer project;
@ExcelIgnore
private List<Integer> projects;
@ExcelIgnore
private String files;
//1通过 2不通过
private Integer ysFlag;
@ExcelIgnore
private Integer execution;
@ExcelIgnore
private List<Integer> executions;
@ExcelIgnore
private List<ZtProjectDTO> executionList;
@ExcelIgnore
private Boolean psFlag;
private String executionName;
@ExcelIgnore
private Integer feedbackId;
@ExcelIgnore
private Integer userStory;
@ExcelIgnore
private ZtStoryUserDTO userStoryInfo;
private String userStoryName;
@ExcelIgnore
private String ysRemark;
//验收人
private String ysUser;
//验收人
private String ysUserName;
@ExcelIgnore
private Integer taskCount;
@ExcelIgnore
private Integer releaseFlag=0;
//发布id
@ExcelIgnore
private Integer releaseId;
@ExcelIgnore
private String releaseName;
@ExcelIgnore
private List<ZtBugDTO> bugList;
//验收日期
@ExcelIgnore
private Date ysDate;
//开发完成时间
@ExcelIgnore
private Date develDate;
//测试完成时间
@ExcelIgnore
private Date testedDate;
@ExcelIgnore
private ZtStoryCaseDTO caseInfo;
}

View File

@@ -1,5 +1,8 @@
package com.sa.zentao.dao;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.data.WriteCellData;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -21,106 +24,137 @@ import java.util.List;
public class ZtStoryFeedbackDTO implements Serializable {
private static final long serialVersionUID = 1L;
@ExcelProperty(value = "ID",index =0)
private Integer id;
@ExcelProperty(value = "类型",index =1)
private String typeName;
@ExcelProperty(value = "描述",index =2)
private String spec;
@ExcelProperty(value = "状态",index =3)
private String status;
@ExcelProperty(value = "提出人",index =4)
private String openedByName;
//来源 zentao weixin
@ExcelProperty(value = "来源",index =5)
private String source;
@ExcelProperty(value = "渠道",index =6)
private String openSource;
@ExcelProperty(value = "指派给",index =7)
private String assignedToName;
@ExcelProperty(value = "关闭原因",index =8)
private String closeRemark;
@ExcelProperty(value = "处理结果",index =9)
private String finishedRemark;
@ExcelProperty(value = "创建日期",index =10)
private Date openedDate;
@ExcelProperty(value = "更新日期",index =11)
private Date updateDate;
@ExcelProperty(value = "需求链接",index =12)
private WriteCellData<String> feedbackUrl;
@ExcelIgnore
private String vx;
/**
* 名称
*/
@ExcelIgnore
private String name;
/**
* 备注
*/
@ExcelIgnore
private String remark;
/**
* 文件,隔开
*/
@ExcelIgnore
private String files;
@ExcelIgnore
private String urls;
@ExcelIgnore
private String openedBy;
private String openedByName;
private Date openedDate;
private Date updateDate;
@ExcelIgnore
private String updateUser;
/**
* 需求d
*/
@ExcelIgnore
private Integer storyId;
@ExcelIgnore
private String storyName;
/**
* 来源
*/
private String source;
@ExcelIgnore
private Date planEndDate;
@ExcelIgnore
private String assignedTo;
private String assignedToName;
private String spec;
// wait finished closed
private String status;
// private String status;
@ExcelIgnore
private String fileUrl;
@ExcelIgnore
private Integer type;
private String closeRemark;
@ExcelIgnore
private Integer product;
@ExcelIgnore
private String productName;
//预计完成时间
@ExcelIgnore
private Date planFinishDate;
@ExcelIgnore
private Date finishDate;
//响应时间 处理时间
@ExcelIgnore
private Date handDate;
//关闭日期
@ExcelIgnore
private Date closeDate;
//来源 zentao weixin
private String openSource;
//业务id
@ExcelIgnore
private String businessId;
//1.通过 0不通过
@ExcelIgnore
private Integer approval;
@ExcelIgnore
private String approvalRemark;
@ExcelIgnore
private String weixin;
//无需处理
@ExcelIgnore
private String dontHandSelect;
//无需处理
@ExcelIgnore
private String dontHandRemark;
@ExcelIgnore
private List<ZtTaskDTO> taskList;
@ExcelIgnore
private List<ZtBugDTO> bugList;
@ExcelIgnore
private List<ZtStoryDTO> storyList;
//1通过 2不通过
@ExcelIgnore
private Integer ysFlag;
@ExcelIgnore
private String desc;
// 1通过 2不通过
@ExcelIgnore
private Integer revieweResult;
@ExcelIgnore
private String oaName;
private String finishedRemark;
}

View File

@@ -1,5 +1,8 @@
package com.sa.zentao.dao;
import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
@@ -26,215 +29,248 @@ public class ZtStoryUserDTO implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO)
// @TableId(value = "id", type = IdType.AUTO)
// @ExcelProperty
@ExcelProperty(value = "ID",index =0)
private Integer id;
private String vision;
private Integer parent;
private String parentName;
private Integer product;
private String productName;
private Integer project;
private Integer branch;
private Integer module;
private String moduleName;
private String plan;
private String source;
@TableField("sourceNote")
private String sourcenote;
@TableField("fromBug")
private Integer frombug;
private Integer feedback;
@ExcelProperty(value = "用户需求名称",index =1)
private String title;
private String keywords;
private String type;
private String category;
@ExcelProperty(value = "P",index =2)
private Integer pri;
private Float estimate;
@ExcelProperty(value = "创建者",index =3)
private String openedbyName;
/**
* 111:xxxxx,
* 222:xxxx
*/
@ExcelProperty(value = "关联研发需求",index =4)
private String storyList;
@ExcelProperty(value = "状态",index =5)
private String status;
@TableField("subStatus")
private String substatus;
@ExcelProperty(value = "来源",index =6)
private String source;
private String color;
@ExcelProperty(value = "期望完成时间",index =7)
private Date planEndDate;
/**
* 验收人
*/
@ExcelIgnore
private String ysUser;
@ExcelProperty(value = "验收人",index =8)
private String ysUserName;
@ExcelProperty(value = "评审人",index =9)
private String reviewedbyName;
private String stage;
@TableField("stagedBy")
private String stagedby;
private String mailto;
private Integer lib;
@TableField("fromStory")
private Integer fromstory;
@TableField("fromVersion")
private Integer fromversion;
@TableField("openedBy")
private String openedby;
private String openedbyName;
@TableField("openedDate")
@ExcelProperty(value = "创建日期",index =10)
private Date openeddate;
@TableField("assignedTo")
private String assignedto;
private String assignedtoName;
@TableField("assignedDate")
private Date assigneddate;
@TableField("approvedDate")
private Date approveddate;
@TableField("lastEditedBy")
private String lasteditedby;
@TableField("lastEditedDate")
@ExcelProperty(value = "更新日期",index =11)
private Date lastediteddate;
@TableField("changedBy")
private String changedby;
@TableField("changedDate")
private Date changeddate;
@TableField("reviewedBy")
private String reviewedby;
private String reviewedbyName;
@TableField("reviewedDate")
private Date revieweddate;
@TableField("releasedDate")
private Date releaseddate;
@TableField("closedBy")
@ExcelIgnore
private String closedby;
@ExcelProperty(value = "由谁关闭",index =12)
private String closedbyName;
@TableField("closedDate")
@ExcelIgnore
private Date closeddate;
@TableField("closedReason")
@ExcelProperty(value = "关闭原因",index =13)
private String closedreason;
@TableField("activatedDate")
@ExcelProperty(value = "需求链接",index =14)
private WriteCellData<String> url;
@ExcelIgnore
private String vision;
@ExcelIgnore
private Integer parent;
@ExcelIgnore
private String parentName;
@ExcelIgnore
private Integer product;
@ExcelIgnore
private String productName;
@ExcelIgnore
private Integer project;
@ExcelIgnore
private Integer branch;
@ExcelIgnore
private Integer module;
@ExcelIgnore
private String moduleName;
@ExcelIgnore
private String plan;
@ExcelIgnore
private String sourcenote;
@ExcelIgnore
private Integer frombug;
@ExcelIgnore
private Integer feedback;
@ExcelIgnore
private String keywords;
@ExcelIgnore
private String type;
@ExcelIgnore
private String category;
@ExcelIgnore
private Float estimate;
@ExcelIgnore
private String substatus;
@ExcelIgnore
private String color;
@ExcelIgnore
private String stage;
@ExcelIgnore
private String stagedby;
@ExcelIgnore
private String mailto;
@ExcelIgnore
private Integer lib;
@ExcelIgnore
private Integer fromstory;
@ExcelIgnore
private Integer fromversion;
@ExcelIgnore
private String openedby;
@ExcelIgnore
private String assignedto;
@ExcelIgnore
private String assignedtoName;
@ExcelIgnore
private Date assigneddate;
@ExcelIgnore
private Date approveddate;
@ExcelIgnore
private String lasteditedby;
@ExcelIgnore
private String changedby;
@ExcelIgnore
private Date changeddate;
@ExcelIgnore
private String reviewedby;
@ExcelIgnore
private Date revieweddate;
@ExcelIgnore
private Date releaseddate;
@ExcelIgnore
private Date activateddate;
@TableField("toBug")
@ExcelIgnore
private Integer tobug;
@TableField("childStories")
@ExcelIgnore
private String childstories;
@TableField("linkStories")
@ExcelIgnore
private String linkstories;
@TableField("linkRequirements")
@ExcelIgnore
private String linkrequirements;
@ExcelIgnore
private String twins;
@TableField("duplicateStory")
@ExcelIgnore
private Integer duplicatestory;
@ExcelIgnore
private Integer version;
@TableField("storyChanged")
@ExcelIgnore
private String storychanged;
@TableField("feedbackBy")
@ExcelIgnore
private String feedbackby;
@TableField("notifyEmail")
@ExcelIgnore
private String notifyemail;
@TableField("BSA")
@ExcelIgnore
private String bsa;
@ExcelIgnore
private String duration;
@ExcelIgnore
private Integer demand;
@TableField("submitedBy")
@ExcelIgnore
private String submitedby;
@ExcelIgnore
private String roadmap;
@TableField("URChanged")
@ExcelIgnore
private String urchanged;
@ExcelIgnore
private String deleted;
@ExcelIgnore
private Date planStartDate;
private Date planEndDate;
@ExcelIgnore
private Date startDate;
@ExcelIgnore
private Date endDate;
/**
* 1通过 2不通过
*/
@ExcelIgnore
private Integer ysFlag;
/**
* 验收人
*/
private String ysUser;
@ExcelIgnore
private String spec;
@ExcelIgnore
private String fileUrl;
@ExcelIgnore
private String remark;
private String storyList;
@ExcelIgnore
private List<String> userViewId;
@ExcelIgnore
private List<ZtStoryreviewDTO> views;
@ExcelIgnore
private List<ZtStoryDTO> sList;
@ExcelIgnore
private List<ZtStoryUserTaskDTO> taskList;
@ExcelIgnore
private String revieweUser;
@ExcelIgnore
private String files;
@ExcelIgnore
private String verify;
@ExcelIgnore
private Date psDate;
@ExcelIgnore
private String ysRemark;
//交付
@ExcelIgnore
private String deliverRemark;
// 1 需要 2不需要
@ExcelIgnore
private Integer needDesign;
//1.需要 2.不需要
@ExcelIgnore
private Integer needImprove;
}

View File

@@ -62,7 +62,7 @@ public class ZtStory implements Serializable {
private Integer pri;
private Float estimate;
//reviewing 评审中 active 激活 draft 草稿 //finished 完成 验收完成
//reviewing 评审中 active 激活 draft 草稿 finished 验收完成
private String status;
@TableField("subStatus")

View File

@@ -0,0 +1,44 @@
package com.sa.zentao.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
public enum FeedbackStatusEnums {
wait("wait","激活"),
doing("doing", "处理中"),
finished("finished", "完成"),
submitVerified("submitVerified", "提交验收"),
closed("closed", "关闭"),
reviewing("reviewing", "评审中"),
feedbackStory("feedbackStory", "问题反馈"),
verified("verified", "已验收"),
dontHand("dontHand", "无需处理"),
;
@EnumValue
private String code;
private String value;
private FeedbackStatusEnums(String code, String value) {
this.code = code;
this.value = value;
}
public String getCode() {
return this.code;
}
public String getValue() {
return this.value;
}
public static FeedbackStatusEnums transferType(String code){
FeedbackStatusEnums[] values = values();
for (FeedbackStatusEnums v:values ) {
if(v.code.equals(code)){
return v;
}
}
return null;
}
}

View File

@@ -10,6 +10,7 @@ public enum StoryStageEnums {
wait(2, "wait","初始化"),
projected(3, "projected","已立项"),
developing(4, "developing","研发中"),
developed(10, "developed","研发完毕"),
testing(5, "testing","测试中"),
tested(6, "tested","测试完毕"),
released(7, "released","已发布"),
@@ -34,4 +35,17 @@ public enum StoryStageEnums {
public String getValue() {
return this.value;
}
public String getDesc() {
return this.desc;
}
public static StoryStageEnums transfer(String code){
StoryStageEnums[] values = values();
for (StoryStageEnums e:values) {
if(e.value.equals(code)){
return e;
}
}
return null;
}
}

View File

@@ -0,0 +1,39 @@
package com.sa.zentao.enums;
import com.baomidou.mybatisplus.annotation.EnumValue;
public enum StoryStatusEnums {
reviewing( "reviewing","评审中"),
active( "active","激活"),
draft("draft","草稿"),
finished("finished","完成"),
closed("closed","已关闭"),
;
@EnumValue
private String value;
private String desc;
private StoryStatusEnums( String value,String desc) {
this.value = value;
this.desc=desc;
}
public String getValue() {
return this.value;
}
public String getDesc() {
return this.desc;
}
public static StoryStatusEnums transfer(String code){
StoryStatusEnums[] values = values();
for (StoryStatusEnums e:values) {
if(e.value.equals(code)){
return e;
}
}
return null;
}
}

View File

@@ -190,7 +190,7 @@ public class IZtCountService {
return new ZtStoryCountDTO();
}
String name = loginRiskUser.getName();
if (userType == UserType.GSGC || userType == UserType.XMZL) {
if (userType == UserType.GSGC ) {
List<ZtStoryUser> list = null;
List<ZtStory> ztStory = null;
@@ -379,7 +379,7 @@ public class IZtCountService {
result = setFeedback(result, feedbacks);
} else if (userType == UserType.XMGLY) {
} else if (userType == UserType.XMGLY || userType == UserType.XMZL) {
List<ZtProduct> pList = this.productService.listByIds(pIds);

View File

@@ -1455,6 +1455,10 @@ public class ZtProjectServiceImpl extends ServiceImpl<ZtProjectMapper, ZtProject
dto.getStatus());
ztProject.setLastEditedBy(RiskUserThreadLocal.get().getName());
ztProject.setLastEditedDate(new Date());
if("closed".equals(ztProject.getStatus())) {
ztProject.setClosedDate(new Date());
ztProject.setClosedBy(RiskUserThreadLocal.get().getName());
}
this.baseMapper.updateById(ztProject);
}

View File

@@ -114,6 +114,7 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
Integer productId = qo.getProductId();
qo.setUserName(RiskUserThreadLocal.get().getName());
List<ZtStoryDTO> list = this.baseMapper.pageList(qo);
if (!CollectionUtils.isEmpty(list)) {
List<String> userIds = list.stream().map(o -> o.getAssignedTo()).collect(Collectors.toList());
userIds.addAll(list.stream().map(o -> o.getOpenedby()).collect(Collectors.toList()));
@@ -147,6 +148,14 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
if (ztUser != null) {
d.setYsUserName(ztUser.getNickname());
}
ztUser = userMap.get(d.getClosedby());
if (ztUser != null) {
d.setClosedbyName(ztUser.getNickname());
}
ztUser = userMap.get(d.getUserStoryCreateUser());
if (ztUser != null) {
d.setUserStoryCreateUser(ztUser.getNickname());
}
List<ZtProject> ztProjectList = executionMapByStory.get(d.getId());
if (!CollectionUtils.isEmpty(ztProjectList)) {
// d.setExecution(ztProject.getId());

View File

@@ -1,5 +1,7 @@
package com.sa.zentao.service.impl;
import com.alibaba.excel.metadata.data.HyperlinkData;
import com.alibaba.excel.metadata.data.WriteCellData;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
@@ -28,6 +30,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@@ -80,6 +83,10 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
@Autowired
private VxService vxService;
@Value("${file.backUrl}")
private String url;
@Override
@Transactional
public void addStory(ZtStoryUserDTO dto) {
@@ -247,7 +254,9 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
@Override
public Map<String, List<ZtStoryUserDTO>> getKanban(Integer productId) {
List<ZtStoryUser> ztStoryUsers = this.baseMapper.selectList(new QueryWrapper<ZtStoryUser>().lambda().eq(ZtStoryUser::getProduct, productId).orderByDesc(ZtStoryUser::getId));
List<ZtStoryUser> ztStoryUsers = this.baseMapper.selectList(new QueryWrapper<ZtStoryUser>()
.lambda().select(ZtStoryUser::getId,ZtStoryUser::getPri,ZtStoryUser::getTitle,ZtStoryUser::getStage,ZtStoryUser::getStatus,ZtStoryUser::getOpenedby,ZtStoryUser::getOpeneddate,ZtStoryUser::getLastediteddate)
.eq(ZtStoryUser::getProduct, productId).orderByDesc(ZtStoryUser::getId));
Map<String, List<ZtStoryUserDTO>> map = new HashMap<>();
Map<String, ZtUser> stringZtUserMap = this.userService.userMapByIds(ztStoryUsers.stream().map(o -> o.getOpenedby()).collect(Collectors.toList()));
@@ -257,6 +266,7 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
ZtUser ztUser = stringZtUserMap.get(t.getOpenedby());
if(ztUser!=null){
s.setOpenedbyName(ztUser.getNickname());
s.setColor(ztUser.getColor());
}
}
});
@@ -271,7 +281,7 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
map.put("designdone",ztStoryUserDTOS.stream().filter(o->"designdone".equals(o.getStatus())).collect(Collectors.toList()));
map.put("storyunconfirmed",ztStoryUserDTOS.stream().filter(o->"storyunconfirmed".equals(o.getStatus())).collect(Collectors.toList()));
map.put("confirmed",ztStoryUserDTOS.stream().filter(o->"confirmed".equals(o.getStatus())).collect(Collectors.toList()));
return Map.of();
return map;
}
@Override
@@ -298,8 +308,6 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
Page<ZtStoryUserDTO> page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize());
List<ZtStoryUserDTO> list = this.baseMapper.pageList(qo);
if (!CollectionUtils.isEmpty(list)) {
List<String> userIds = list.stream().map(o -> o.getOpenedby()).collect(Collectors.toList());
userIds.addAll(list.stream().map(o -> o.getLasteditedby()).collect(Collectors.toList()));
@@ -329,7 +337,10 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
if (ztUser != null) {
d.setOpenedbyName(ztUser.getNickname());
}
ztUser = userMap.get(d.getYsUser());
if (ztUser != null) {
d.setYsUserName(ztUser.getNickname());
}
ztUser = userMap.get(d.getLasteditedby());
if (ztUser != null) {
d.setLasteditedby(ztUser.getNickname());
@@ -338,14 +349,37 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
if (ztUser != null) {
d.setOpenedbyName(ztUser.getNickname());
}
ztUser = userMap.get(d.getClosedby());
if (ztUser != null) {
d.setClosedbyName(ztUser.getNickname());
}
ztUser = userMap.get(d.getYsUser());
if (ztUser != null) {
d.setYsUserName(ztUser.getNickname());
}
List<ZtStory> ztStories = storyUserMap.get(d.getId());
if (!CollectionUtils.isEmpty(ztStories)) {
d.setStoryList(ztStories.stream().map(o -> o.getTitle()).collect(Collectors.joining(",")));
d.setStoryList(ztStories.stream().map(o ->o.getId()+":"+o.getTitle()).collect(Collectors.joining(",")));
d.setSList(CollectionUtils.isEmpty(ztStories)?null:BeanCopyUtil.copyListProperties(ztStories,ZtStoryDTO::new));
}
String reName = d.getTitle();
String reUrl = url+"/#/product-user-story-info/"+d.getId();
WriteCellData<String> hyperlink = new WriteCellData<>(reName);
HyperlinkData hyperlinkData = new HyperlinkData();
try {
hyperlinkData.setAddress(reUrl.replace(" ", "%20"));
hyperlinkData.setHyperlinkType(HyperlinkData.HyperlinkType.URL);
hyperlink.setHyperlinkData(hyperlinkData);
d.setUrl(hyperlink );
} catch (Exception e) {
log.error(e.getMessage(), e);
d.setUrl(null );
}
}
}
return new PageInfo<ZtStoryUserDTO>(list);
}
@@ -509,6 +543,10 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
if (ztUser != null) {
dto.setClosedbyName(ztUser.getNickname());
}
ztUser = userMap.get(dto.getYsUser());
if (ztUser != null) {
dto.setYsUserName(ztUser.getNickname());
}
Map<Integer, List<ZtStory>> storyUserMap = getStoryUserMap(Arrays.asList(dto));
List<ZtStory> ztStories = storyUserMap.get(d.getId());
if (!CollectionUtils.isEmpty(ztStories)) {

View File

@@ -33,6 +33,7 @@ spring:
file:
# baseUrl: http://192.168.3.200:8013
baseUrl: https://itsm.sino-assist.com
backUrl: https://itsm.sino-assist.com
meeting: /data/buildzentao/meeting.docx
#vx:

View File

@@ -40,6 +40,7 @@ spring:
file:
baseUrl: http://192.168.1.161:8085
backUrl: http://192.168.1.161:8015
# baseUrl: http://127.0.0.1:8085
meeting: /data/buildzentao/meeting.docx

View File

@@ -135,13 +135,20 @@
s.ys_remark,
s.ys_user,
s.task_count,
s.ys_date
from zt_story s
s.ys_date,
su.title userStoryName,
su.id userStoryId,
ps.title parentName,
su.openedDate userStoryCreateTime,
su.openedBy userStoryCreateUser
from zt_story s
left join zt_story_user su on s.user_story = su.id
left join zt_storyreview v on s.id = v.story and s.version = v.version
left join zt_story ps on s.parent = ps.id
where 1=1
and product = #{qo.productId}
and s.product = #{qo.productId}
<if test="qo.searchVal == 'ALL' ">
</if>

View File

@@ -90,7 +90,8 @@
</if>
<if test="qo.searchVal == 'WGB' ">
and s.status != 'closed'
-- and s.status != 'closed'
and s.status in ('wait', 'doing')
</if>
<if test="qo.searchVal == 'ZGW' ">