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; 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.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.sa.zentao.dao.*; import com.sa.zentao.dao.*;
import com.sa.zentao.entity.ZtProject; import com.sa.zentao.entity.ZtProject;
import com.sa.zentao.entity.ZtProjectproduct; 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.SearchQo;
import com.sa.zentao.qo.StoryQo;
import com.sa.zentao.qo.ZtProjectQo; import com.sa.zentao.qo.ZtProjectQo;
import com.sa.zentao.service.IZtProjectproductService; import com.sa.zentao.service.IZtProjectproductService;
import com.sa.zentao.service.IZtStoryFeedbackService;
import com.sa.zentao.service.IZtStoryService; 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.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; 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.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
/** /**
@@ -39,13 +55,118 @@ public class ZtStoryController {
@Autowired @Autowired
private IZtProjectproductService projectproductService; 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") @RequestMapping(value = "/pageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public Result<ZtStoryDTO> storyPageList(@RequestBody ZtProjectQo qo){ public Result<ZtStoryDTO> storyPageList(@RequestBody ZtProjectQo qo){
return Result.success(ztStoryService.pageList(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") @RequestMapping(value = "/projectStoryPageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public Result<ZtStoryDTO> projectStoryPageList(@RequestBody ZtProjectQo qo){ public Result<ZtStoryDTO> projectStoryPageList(@RequestBody ZtProjectQo qo){

View File

@@ -1,22 +1,38 @@
package com.sa.zentao.controller; 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.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageInfo;
import com.sa.zentao.dao.Result; import com.sa.zentao.dao.Result;
import com.sa.zentao.dao.ZtStoryDTO; import com.sa.zentao.dao.ZtStoryDTO;
import com.sa.zentao.dao.ZtStoryFeedbackDTO; import com.sa.zentao.dao.ZtStoryFeedbackDTO;
import com.sa.zentao.dao.ZtStoryUserDTO; import com.sa.zentao.dao.ZtStoryUserDTO;
import com.sa.zentao.entity.ZtStoryFeedback; 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.qo.ZtProjectQo;
import com.sa.zentao.service.IZtStoryFeedbackService; 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.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.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/** /**
* <p> * <p>
@@ -33,11 +49,74 @@ public class ZtStoryFeedbackController {
@Autowired @Autowired
private IZtStoryFeedbackService storyFeedbackService; private IZtStoryFeedbackService storyFeedbackService;
@Value("${file.backUrl}")
private String url;
@RequestMapping(value = "/pageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8") @RequestMapping(value = "/pageList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public Result<ZtStoryFeedbackDTO> storyPageList(@RequestBody ZtProjectQo qo){ public Result<ZtStoryFeedbackDTO> storyPageList(@RequestBody ZtProjectQo qo){
return Result.success(storyFeedbackService.pageList(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") @RequestMapping(value = "/getFeedbackById", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public Result<ZtStoryFeedbackDTO> getFeedbackById(@RequestBody ZtProjectQo qo){ public Result<ZtStoryFeedbackDTO> getFeedbackById(@RequestBody ZtProjectQo qo){
return Result.success(storyFeedbackService.getFeedbackById(qo)); return Result.success(storyFeedbackService.getFeedbackById(qo));

View File

@@ -1,12 +1,14 @@
package com.sa.zentao.controller; 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.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.sa.zentao.dao.Result; import com.sa.zentao.dao.*;
import com.sa.zentao.dao.ZtStoryDTO;
import com.sa.zentao.dao.ZtStoryUserDTO;
import com.sa.zentao.entity.ZtStory; import com.sa.zentao.entity.ZtStory;
import com.sa.zentao.entity.ZtStoryUser; import com.sa.zentao.entity.ZtStoryUser;
import com.sa.zentao.enums.UserStoryEnums; 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.util.CollectionUtils;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.io.IOException;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -59,7 +62,7 @@ public class ZtStoryUserController {
storyUserService.addStory(dto); storyUserService.addStory(dto);
return Result.success(); 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){ public Result getKanban(@RequestParam(name = "productId",required = true) Integer productId){
return Result.success(storyUserService.getKanban(productId)); return Result.success(storyUserService.getKanban(productId));
} }
@@ -80,6 +83,36 @@ public class ZtStoryUserController {
return Result.success(p); 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") @RequestMapping(value = "/storyList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
public Result storyList(@RequestBody StoryQo qo){ public Result storyList(@RequestBody StoryQo qo){
LambdaQueryWrapper<ZtStoryUser> eq = new QueryWrapper<ZtStoryUser>() LambdaQueryWrapper<ZtStoryUser> eq = new QueryWrapper<ZtStoryUser>()

View File

@@ -1,5 +1,8 @@
package com.sa.zentao.dao; 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.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
@@ -28,59 +31,145 @@ public class ZtStoryDTO implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@TableId(value = "id", type = IdType.AUTO) @ExcelProperty(value = "ID",index =0)
private Integer id; private Integer id;
@ExcelProperty(value = "研发需求名称",index =1)
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;
private String title; private String title;
@ExcelProperty(value = "P",index =2)
private String keywords;
private String type;
private String category;
private Integer pri; private Integer pri;
private Float estimate; @ExcelProperty(value = "迭代名称",index =3)
private String executionName;
// private List<ZtProjectDTO> executionList;
@ExcelProperty(value = "状态",index =4)
private String status; private String status;
@TableField("subStatus") @ExcelProperty(value = "期望完成时间",index =5)
private String substatus; 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; private String color;
// //
// {key:'研发中',value:'developing'} // {key:'研发中',value:'developing'}
@@ -90,188 +179,153 @@ public class ZtStoryDTO implements Serializable {
// ,{key:'已验收',value:'verified'} // ,{key:'已验收',value:'verified'}
// ,{key:'已发布',value:'released'} // ,{key:'已发布',value:'released'}
// ,{key:'已关闭',value:'closed'} // ,{key:'已关闭',value:'closed'}
private String stage;
@TableField("stagedBy") @ExcelIgnore
private String stagedby; private String stagedby;
@ExcelIgnore
private String mailto; private String mailto;
@ExcelIgnore
private Integer lib; private Integer lib;
@ExcelIgnore
@TableField("fromStory")
private Integer fromstory; private Integer fromstory;
@ExcelIgnore
@TableField("fromVersion")
private Integer fromversion; private Integer fromversion;
@ExcelIgnore
@TableField("openedBy")
private String openedby; private String openedby;
private String openedbyName;
@TableField("openedDate")
private Date openeddate;
@TableField("assignedTo") @ExcelIgnore
private String assignedTo; private String assignedTo;
private String assignedToName; @ExcelIgnore
@TableField("assignedDate")
private Date assigneddate; private Date assigneddate;
@ExcelIgnore
@TableField("approvedDate")
private Date approveddate; private Date approveddate;
@ExcelIgnore
@TableField("lastEditedBy")
private String lasteditedby; private String lasteditedby;
@TableField("lastEditedDate") @ExcelIgnore
private Date lastediteddate;
@TableField("changedBy")
private String changedby; private String changedby;
@ExcelIgnore
@TableField("changedDate")
private Date changeddate; private Date changeddate;
@TableField("reviewedBy") @ExcelIgnore
private String reviewedby;
private String reviewedbyName;
private String revieweUser;
private Integer revieweResult; private Integer revieweResult;
@ExcelIgnore
@TableField("reviewedDate")
private Date revieweddate; private Date revieweddate;
@ExcelIgnore
@TableField("releasedDate")
private Date releaseddate; private Date releaseddate;
@ExcelIgnore
private Date planYsDate; private Date planYsDate;
@TableField("closedBy")
private String closedby;
@TableField("closedDate")
private Date closeddate;
@TableField("closedReason")
private String closedreason;
@TableField("activatedDate") @ExcelIgnore
private Date activateddate; private Date activateddate;
@ExcelIgnore
@TableField("toBug")
private Integer tobug; private Integer tobug;
@ExcelIgnore
@TableField("childStories")
private String childstories; private String childstories;
@ExcelIgnore
@TableField("linkStories")
private String linkstories; private String linkstories;
@ExcelIgnore
@TableField("linkRequirements")
private String linkrequirements; private String linkrequirements;
@ExcelIgnore
private String twins; private String twins;
@ExcelIgnore
@TableField("duplicateStory")
private Integer duplicatestory; private Integer duplicatestory;
@ExcelIgnore
private Integer version; private Integer version;
@ExcelIgnore
@TableField("storyChanged")
private String storychanged; private String storychanged;
@ExcelIgnore
@TableField("feedbackBy")
private String feedbackby; private String feedbackby;
@ExcelIgnore
@TableField("notifyEmail")
private String notifyemail; private String notifyemail;
@ExcelIgnore
@TableField("BSA")
private String bsa; private String bsa;
@ExcelIgnore
private String duration; private String duration;
@ExcelIgnore
private Integer demand; private Integer demand;
@ExcelIgnore
//描述
private String desc; private String desc;
@ExcelIgnore
@TableField("submitedBy")
private String submitedby; private String submitedby;
@ExcelIgnore
private String roadmap; private String roadmap;
@ExcelIgnore
@TableField("URChanged")
private String urchanged; private String urchanged;
@ExcelIgnore
private String deleted; private String deleted;
@ExcelIgnore
private List<String> userViewId; private List<String> userViewId;
@ExcelIgnore
private String remark; private String remark;
@ExcelIgnore
private List<ZtStoryreviewDTO> views; private List<ZtStoryreviewDTO> views;
@ExcelIgnore
private String fileUrl; private String fileUrl;
@ExcelIgnore
private String verify; private String verify;
@ExcelIgnore
private String spec; private String spec;
//计划开始时间 //计划开始时间
@ExcelIgnore
private Date planStartDate; private Date planStartDate;
//计划结束时间
private Date planEndDate;
//开始日期 //开始日期
@ExcelIgnore
private Date startDate; private Date startDate;
//结束日期 //结束日期
@ExcelIgnore
private Date endDate; private Date endDate;
@ExcelIgnore
private Integer project; private Integer project;
@ExcelIgnore
private List<Integer> projects; private List<Integer> projects;
@ExcelIgnore
private String files; private String files;
//1通过 2不通过 @ExcelIgnore
private Integer ysFlag;
private Integer execution; private Integer execution;
@ExcelIgnore
private List<Integer> executions; private List<Integer> executions;
@ExcelIgnore
private List<ZtProjectDTO> executionList; private List<ZtProjectDTO> executionList;
@ExcelIgnore
private Boolean psFlag; private Boolean psFlag;
@ExcelIgnore
private String executionName;
private Integer feedbackId; private Integer feedbackId;
@ExcelIgnore
private Integer userStory; private Integer userStory;
@ExcelIgnore
private ZtStoryUserDTO userStoryInfo; private ZtStoryUserDTO userStoryInfo;
private String userStoryName; @ExcelIgnore
private String ysRemark; private String ysRemark;
//验收人 @ExcelIgnore
private String ysUser;
//验收人
private String ysUserName;
private Integer taskCount; private Integer taskCount;
@ExcelIgnore
private Integer releaseFlag=0; private Integer releaseFlag=0;
//发布id //发布id
@ExcelIgnore
private Integer releaseId; private Integer releaseId;
@ExcelIgnore
private String releaseName; private String releaseName;
@ExcelIgnore
private List<ZtBugDTO> bugList; private List<ZtBugDTO> bugList;
//验收日期 //验收日期
@ExcelIgnore
private Date ysDate; private Date ysDate;
//开发完成时间 //开发完成时间
@ExcelIgnore
private Date develDate; private Date develDate;
//测试完成时间 //测试完成时间
@ExcelIgnore
private Date testedDate; private Date testedDate;
@ExcelIgnore
private ZtStoryCaseDTO caseInfo; private ZtStoryCaseDTO caseInfo;
} }

View File

@@ -1,5 +1,8 @@
package com.sa.zentao.dao; 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.Data;
import lombok.EqualsAndHashCode; import lombok.EqualsAndHashCode;
@@ -21,106 +24,137 @@ import java.util.List;
public class ZtStoryFeedbackDTO implements Serializable { public class ZtStoryFeedbackDTO implements Serializable {
private static final long serialVersionUID = 1L; private static final long serialVersionUID = 1L;
@ExcelProperty(value = "ID",index =0)
private Integer id; 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; private String vx;
/** /**
* 名称 * 名称
*/ */
@ExcelIgnore
private String name; private String name;
/** /**
* 备注 * 备注
*/ */
@ExcelIgnore
private String remark; private String remark;
/** /**
* 文件,隔开 * 文件,隔开
*/ */
@ExcelIgnore
private String files; private String files;
@ExcelIgnore
private String urls; private String urls;
@ExcelIgnore
private String openedBy; private String openedBy;
@ExcelIgnore
private String openedByName;
private Date openedDate;
private Date updateDate;
private String updateUser; private String updateUser;
/** /**
* 需求d * 需求d
*/ */
@ExcelIgnore
private Integer storyId; private Integer storyId;
@ExcelIgnore
private String storyName; private String storyName;
/** @ExcelIgnore
* 来源
*/
private String source;
private Date planEndDate; private Date planEndDate;
@ExcelIgnore
private String assignedTo; private String assignedTo;
private String assignedToName;
private String spec;
// wait finished closed // wait finished closed
private String status; // private String status;
@ExcelIgnore
private String fileUrl; private String fileUrl;
@ExcelIgnore
private Integer type; private Integer type;
private String closeRemark;
@ExcelIgnore
private Integer product; private Integer product;
@ExcelIgnore
private String productName; private String productName;
//预计完成时间 //预计完成时间
@ExcelIgnore
private Date planFinishDate; private Date planFinishDate;
@ExcelIgnore
private Date finishDate; private Date finishDate;
//响应时间 处理时间 //响应时间 处理时间
@ExcelIgnore
private Date handDate; private Date handDate;
//关闭日期 //关闭日期
@ExcelIgnore
private Date closeDate; private Date closeDate;
//来源 zentao weixin
private String openSource;
//业务id //业务id
@ExcelIgnore
private String businessId; private String businessId;
//1.通过 0不通过 //1.通过 0不通过
@ExcelIgnore
private Integer approval; private Integer approval;
@ExcelIgnore
private String approvalRemark; private String approvalRemark;
@ExcelIgnore
private String weixin; private String weixin;
//无需处理 //无需处理
@ExcelIgnore
private String dontHandSelect; private String dontHandSelect;
//无需处理 //无需处理
@ExcelIgnore
private String dontHandRemark; private String dontHandRemark;
@ExcelIgnore
private List<ZtTaskDTO> taskList; private List<ZtTaskDTO> taskList;
@ExcelIgnore
private List<ZtBugDTO> bugList; private List<ZtBugDTO> bugList;
@ExcelIgnore
private List<ZtStoryDTO> storyList; private List<ZtStoryDTO> storyList;
//1通过 2不通过 //1通过 2不通过
@ExcelIgnore
private Integer ysFlag; private Integer ysFlag;
@ExcelIgnore
private String desc; private String desc;
// 1通过 2不通过 // 1通过 2不通过
@ExcelIgnore
private Integer revieweResult; private Integer revieweResult;
@ExcelIgnore
private String oaName; private String oaName;
private String finishedRemark;
} }

View File

@@ -1,5 +1,8 @@
package com.sa.zentao.dao; 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.IdType;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableId;
@@ -26,215 +29,248 @@ public class ZtStoryUserDTO implements Serializable {
private static final long serialVersionUID = 1L; 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 Integer id;
private String vision; @ExcelProperty(value = "用户需求名称",index =1)
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;
private String title; private String title;
@ExcelProperty(value = "P",index =2)
private String keywords;
private String type;
private String category;
private Integer pri; private Integer pri;
@ExcelProperty(value = "创建者",index =3)
private Float estimate; private String openedbyName;
/**
* 111:xxxxx,
* 222:xxxx
*/
@ExcelProperty(value = "关联研发需求",index =4)
private String storyList;
@ExcelProperty(value = "状态",index =5)
private String status; private String status;
@TableField("subStatus") @ExcelProperty(value = "来源",index =6)
private String substatus; 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; @ExcelProperty(value = "创建日期",index =10)
@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")
private Date openeddate; private Date openeddate;
@TableField("assignedTo") @ExcelProperty(value = "更新日期",index =11)
private String assignedto;
private String assignedtoName;
@TableField("assignedDate")
private Date assigneddate;
@TableField("approvedDate")
private Date approveddate;
@TableField("lastEditedBy")
private String lasteditedby;
@TableField("lastEditedDate")
private Date lastediteddate; private Date lastediteddate;
@TableField("changedBy") @ExcelIgnore
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")
private String closedby; private String closedby;
@ExcelProperty(value = "由谁关闭",index =12)
private String closedbyName; private String closedbyName;
@TableField("closedDate") @ExcelIgnore
private Date closeddate; private Date closeddate;
@TableField("closedReason") @ExcelProperty(value = "关闭原因",index =13)
private String closedreason; 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; private Date activateddate;
@TableField("toBug") @ExcelIgnore
private Integer tobug; private Integer tobug;
@TableField("childStories") @ExcelIgnore
private String childstories; private String childstories;
@ExcelIgnore
@TableField("linkStories")
private String linkstories; private String linkstories;
@ExcelIgnore
@TableField("linkRequirements")
private String linkrequirements; private String linkrequirements;
@ExcelIgnore
private String twins; private String twins;
@TableField("duplicateStory") @ExcelIgnore
private Integer duplicatestory; private Integer duplicatestory;
@ExcelIgnore
private Integer version; private Integer version;
@TableField("storyChanged") @ExcelIgnore
private String storychanged; private String storychanged;
@ExcelIgnore
@TableField("feedbackBy")
private String feedbackby; private String feedbackby;
@ExcelIgnore
@TableField("notifyEmail")
private String notifyemail; private String notifyemail;
@TableField("BSA") @ExcelIgnore
private String bsa; private String bsa;
@ExcelIgnore
private String duration; private String duration;
@ExcelIgnore
private Integer demand; private Integer demand;
@TableField("submitedBy") @ExcelIgnore
private String submitedby; private String submitedby;
@ExcelIgnore
private String roadmap; private String roadmap;
@TableField("URChanged") @ExcelIgnore
private String urchanged; private String urchanged;
@ExcelIgnore
private String deleted; private String deleted;
@ExcelIgnore
private Date planStartDate; private Date planStartDate;
private Date planEndDate; @ExcelIgnore
private Date startDate; private Date startDate;
@ExcelIgnore
private Date endDate; private Date endDate;
/** /**
* 1通过 2不通过 * 1通过 2不通过
*/ */
@ExcelIgnore
private Integer ysFlag; private Integer ysFlag;
/** /**
* 验收人 * 验收人
*/ */
private String ysUser;
@ExcelIgnore
private String spec; private String spec;
@ExcelIgnore
private String fileUrl; private String fileUrl;
@ExcelIgnore
private String remark; private String remark;
private String storyList; @ExcelIgnore
private List<String> userViewId; private List<String> userViewId;
@ExcelIgnore
private List<ZtStoryreviewDTO> views; private List<ZtStoryreviewDTO> views;
@ExcelIgnore
private List<ZtStoryDTO> sList; private List<ZtStoryDTO> sList;
@ExcelIgnore
private List<ZtStoryUserTaskDTO> taskList; private List<ZtStoryUserTaskDTO> taskList;
@ExcelIgnore
private String revieweUser; private String revieweUser;
@ExcelIgnore
private String files; private String files;
@ExcelIgnore
private String verify; private String verify;
@ExcelIgnore
private Date psDate; private Date psDate;
@ExcelIgnore
private String ysRemark; private String ysRemark;
//交付 //交付
@ExcelIgnore
private String deliverRemark; private String deliverRemark;
// 1 需要 2不需要 // 1 需要 2不需要
@ExcelIgnore
private Integer needDesign; private Integer needDesign;
//1.需要 2.不需要 //1.需要 2.不需要
@ExcelIgnore
private Integer needImprove; private Integer needImprove;
} }

View File

@@ -62,7 +62,7 @@ public class ZtStory implements Serializable {
private Integer pri; private Integer pri;
private Float estimate; private Float estimate;
//reviewing 评审中 active 激活 draft 草稿 //finished 完成 验收完成 //reviewing 评审中 active 激活 draft 草稿 finished 验收完成
private String status; private String status;
@TableField("subStatus") @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","初始化"), wait(2, "wait","初始化"),
projected(3, "projected","已立项"), projected(3, "projected","已立项"),
developing(4, "developing","研发中"), developing(4, "developing","研发中"),
developed(10, "developed","研发完毕"),
testing(5, "testing","测试中"), testing(5, "testing","测试中"),
tested(6, "tested","测试完毕"), tested(6, "tested","测试完毕"),
released(7, "released","已发布"), released(7, "released","已发布"),
@@ -34,4 +35,17 @@ public enum StoryStageEnums {
public String getValue() { public String getValue() {
return this.value; 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(); return new ZtStoryCountDTO();
} }
String name = loginRiskUser.getName(); String name = loginRiskUser.getName();
if (userType == UserType.GSGC || userType == UserType.XMZL) { if (userType == UserType.GSGC ) {
List<ZtStoryUser> list = null; List<ZtStoryUser> list = null;
List<ZtStory> ztStory = null; List<ZtStory> ztStory = null;
@@ -379,7 +379,7 @@ public class IZtCountService {
result = setFeedback(result, feedbacks); result = setFeedback(result, feedbacks);
} else if (userType == UserType.XMGLY) { } else if (userType == UserType.XMGLY || userType == UserType.XMZL) {
List<ZtProduct> pList = this.productService.listByIds(pIds); List<ZtProduct> pList = this.productService.listByIds(pIds);

View File

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

View File

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

View File

@@ -1,5 +1,7 @@
package com.sa.zentao.service.impl; 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.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; 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.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
@@ -80,6 +83,10 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
@Autowired @Autowired
private VxService vxService; private VxService vxService;
@Value("${file.backUrl}")
private String url;
@Override @Override
@Transactional @Transactional
public void addStory(ZtStoryUserDTO dto) { public void addStory(ZtStoryUserDTO dto) {
@@ -247,7 +254,9 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
@Override @Override
public Map<String, List<ZtStoryUserDTO>> getKanban(Integer productId) { 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, List<ZtStoryUserDTO>> map = new HashMap<>();
Map<String, ZtUser> stringZtUserMap = this.userService.userMapByIds(ztStoryUsers.stream().map(o -> o.getOpenedby()).collect(Collectors.toList())); 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()); ZtUser ztUser = stringZtUserMap.get(t.getOpenedby());
if(ztUser!=null){ if(ztUser!=null){
s.setOpenedbyName(ztUser.getNickname()); 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("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("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())); map.put("confirmed",ztStoryUserDTOS.stream().filter(o->"confirmed".equals(o.getStatus())).collect(Collectors.toList()));
return Map.of(); return map;
} }
@Override @Override
@@ -298,8 +308,6 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
Page<ZtStoryUserDTO> page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); Page<ZtStoryUserDTO> page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize());
List<ZtStoryUserDTO> list = this.baseMapper.pageList(qo); List<ZtStoryUserDTO> list = this.baseMapper.pageList(qo);
if (!CollectionUtils.isEmpty(list)) { if (!CollectionUtils.isEmpty(list)) {
List<String> userIds = list.stream().map(o -> o.getOpenedby()).collect(Collectors.toList()); List<String> userIds = list.stream().map(o -> o.getOpenedby()).collect(Collectors.toList());
userIds.addAll(list.stream().map(o -> o.getLasteditedby()).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) { if (ztUser != null) {
d.setOpenedbyName(ztUser.getNickname()); d.setOpenedbyName(ztUser.getNickname());
} }
ztUser = userMap.get(d.getYsUser());
if (ztUser != null) {
d.setYsUserName(ztUser.getNickname());
}
ztUser = userMap.get(d.getLasteditedby()); ztUser = userMap.get(d.getLasteditedby());
if (ztUser != null) { if (ztUser != null) {
d.setLasteditedby(ztUser.getNickname()); d.setLasteditedby(ztUser.getNickname());
@@ -338,14 +349,37 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
if (ztUser != null) { if (ztUser != null) {
d.setOpenedbyName(ztUser.getNickname()); 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()); List<ZtStory> ztStories = storyUserMap.get(d.getId());
if (!CollectionUtils.isEmpty(ztStories)) { 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); return new PageInfo<ZtStoryUserDTO>(list);
} }
@@ -509,6 +543,10 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
if (ztUser != null) { if (ztUser != null) {
dto.setClosedbyName(ztUser.getNickname()); 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)); Map<Integer, List<ZtStory>> storyUserMap = getStoryUserMap(Arrays.asList(dto));
List<ZtStory> ztStories = storyUserMap.get(d.getId()); List<ZtStory> ztStories = storyUserMap.get(d.getId());
if (!CollectionUtils.isEmpty(ztStories)) { if (!CollectionUtils.isEmpty(ztStories)) {

View File

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

View File

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

View File

@@ -135,13 +135,20 @@
s.ys_remark, s.ys_remark,
s.ys_user, s.ys_user,
s.task_count, s.task_count,
s.ys_date s.ys_date,
su.title userStoryName,
su.id userStoryId,
ps.title parentName,
su.openedDate userStoryCreateTime,
su.openedBy userStoryCreateUser
from zt_story s 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_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 where 1=1
and product = #{qo.productId} and s.product = #{qo.productId}
<if test="qo.searchVal == 'ALL' "> <if test="qo.searchVal == 'ALL' ">
</if> </if>

View File

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