From 06234bbcc112ed20517c28616d60949fa5b8937f Mon Sep 17 00:00:00 2001 From: guoqibing Date: Wed, 19 Nov 2025 09:49:12 +0800 Subject: [PATCH] =?UTF-8?q?bug=E4=BF=AE=E5=A4=8D=E7=AD=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zentao/controller/ZtStoryController.java | 125 ++++++- .../controller/ZtStoryFeedbackController.java | 79 ++++ .../controller/ZtStoryUserController.java | 41 ++- .../java/com/sa/zentao/dao/ZtStoryDTO.java | 344 ++++++++++-------- .../com/sa/zentao/dao/ZtStoryFeedbackDTO.java | 102 ++++-- .../com/sa/zentao/dao/ZtStoryUserDTO.java | 308 +++++++++------- .../java/com/sa/zentao/entity/ZtStory.java | 2 +- .../sa/zentao/enums/FeedbackStatusEnums.java | 44 +++ .../com/sa/zentao/enums/StoryStageEnums.java | 14 + .../com/sa/zentao/enums/StoryStatusEnums.java | 39 ++ .../zentao/service/impl/IZtCountService.java | 4 +- .../service/impl/ZtProjectServiceImpl.java | 4 + .../service/impl/ZtStoryServiceImpl.java | 9 + .../service/impl/ZtStoryUserServiceImpl.java | 52 ++- src/main/resources/application-dev.yml | 1 + src/main/resources/application-local.yml | 1 + src/main/resources/mapper/ZtStoryMapper.xml | 17 +- .../mapper/ZtStoryUserTaskMapper.xml | 3 +- 18 files changed, 852 insertions(+), 337 deletions(-) create mode 100644 src/main/java/com/sa/zentao/enums/FeedbackStatusEnums.java create mode 100644 src/main/java/com/sa/zentao/enums/StoryStatusEnums.java diff --git a/src/main/java/com/sa/zentao/controller/ZtStoryController.java b/src/main/java/com/sa/zentao/controller/ZtStoryController.java index 0a77009..b5b24b3 100644 --- a/src/main/java/com/sa/zentao/controller/ZtStoryController.java +++ b/src/main/java/com/sa/zentao/controller/ZtStoryController.java @@ -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 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 p = ztStoryService.pageList(qo); + List list = p.getList(); + List feedbackIds = list.stream().filter(o -> o.getFeedback() != null && o.getFeedback() != 0).map(o -> o.getFeedback()).collect(Collectors.toList()); + + Map feedbackMap= CollectionUtils.isEmpty(feedbackIds)?new HashMap(): 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 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 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 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 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 projectStoryPageList(@RequestBody ZtProjectQo qo){ diff --git a/src/main/java/com/sa/zentao/controller/ZtStoryFeedbackController.java b/src/main/java/com/sa/zentao/controller/ZtStoryFeedbackController.java index 42dbfd3..fb635f2 100644 --- a/src/main/java/com/sa/zentao/controller/ZtStoryFeedbackController.java +++ b/src/main/java/com/sa/zentao/controller/ZtStoryFeedbackController.java @@ -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; /** *

@@ -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 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 p = storyFeedbackService.pageList(qo); + List 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 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 getFeedbackById(@RequestBody ZtProjectQo qo){ return Result.success(storyFeedbackService.getFeedbackById(qo)); diff --git a/src/main/java/com/sa/zentao/controller/ZtStoryUserController.java b/src/main/java/com/sa/zentao/controller/ZtStoryUserController.java index 6eb4840..3b798b9 100644 --- a/src/main/java/com/sa/zentao/controller/ZtStoryUserController.java +++ b/src/main/java/com/sa/zentao/controller/ZtStoryUserController.java @@ -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 p = storyUserService.pageList(qo); + List 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 eq = new QueryWrapper() diff --git a/src/main/java/com/sa/zentao/dao/ZtStoryDTO.java b/src/main/java/com/sa/zentao/dao/ZtStoryDTO.java index b34f160..4e69ecb 100644 --- a/src/main/java/com/sa/zentao/dao/ZtStoryDTO.java +++ b/src/main/java/com/sa/zentao/dao/ZtStoryDTO.java @@ -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 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 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 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 parentNameUrl; + @ExcelIgnore + private String parentName; + @ExcelProperty(value = "问题反馈",index =20) + private WriteCellData feedbackSpecUrl; + + @ExcelProperty(value = "需求链接",index =21) + private WriteCellData storyUrl; + + @ExcelIgnore + private String feedbackSpec; + + @ExcelIgnore + private Date closeddate; + @ExcelIgnore + private Integer userStoryId; + + @ExcelIgnore + private String revieweUser; + + @ExcelIgnore + private List 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 userViewId; - + @ExcelIgnore private String remark; - + @ExcelIgnore private List 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 projects; - + @ExcelIgnore private String files; - //1通过 2不通过 - private Integer ysFlag; - + @ExcelIgnore private Integer execution; - + @ExcelIgnore private List executions; + @ExcelIgnore private List 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 bugList; //验收日期 + @ExcelIgnore private Date ysDate; //开发完成时间 + @ExcelIgnore private Date develDate; //测试完成时间 + @ExcelIgnore private Date testedDate; + @ExcelIgnore private ZtStoryCaseDTO caseInfo; } diff --git a/src/main/java/com/sa/zentao/dao/ZtStoryFeedbackDTO.java b/src/main/java/com/sa/zentao/dao/ZtStoryFeedbackDTO.java index 0e6fe8c..6dd3b8d 100644 --- a/src/main/java/com/sa/zentao/dao/ZtStoryFeedbackDTO.java +++ b/src/main/java/com/sa/zentao/dao/ZtStoryFeedbackDTO.java @@ -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 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 taskList; - + @ExcelIgnore private List bugList; - + @ExcelIgnore private List storyList; //1通过 2不通过 + @ExcelIgnore private Integer ysFlag; - + @ExcelIgnore private String desc; // 1通过 2不通过 + @ExcelIgnore private Integer revieweResult; - + @ExcelIgnore private String oaName; - - private String finishedRemark; } diff --git a/src/main/java/com/sa/zentao/dao/ZtStoryUserDTO.java b/src/main/java/com/sa/zentao/dao/ZtStoryUserDTO.java index 34c2e79..2f0b99b 100644 --- a/src/main/java/com/sa/zentao/dao/ZtStoryUserDTO.java +++ b/src/main/java/com/sa/zentao/dao/ZtStoryUserDTO.java @@ -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 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 userViewId; - + @ExcelIgnore private List views; - + @ExcelIgnore private List sList; - + @ExcelIgnore private List 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; } diff --git a/src/main/java/com/sa/zentao/entity/ZtStory.java b/src/main/java/com/sa/zentao/entity/ZtStory.java index f17cb90..d8ffb05 100644 --- a/src/main/java/com/sa/zentao/entity/ZtStory.java +++ b/src/main/java/com/sa/zentao/entity/ZtStory.java @@ -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") diff --git a/src/main/java/com/sa/zentao/enums/FeedbackStatusEnums.java b/src/main/java/com/sa/zentao/enums/FeedbackStatusEnums.java new file mode 100644 index 0000000..18c4cec --- /dev/null +++ b/src/main/java/com/sa/zentao/enums/FeedbackStatusEnums.java @@ -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; + } + +} diff --git a/src/main/java/com/sa/zentao/enums/StoryStageEnums.java b/src/main/java/com/sa/zentao/enums/StoryStageEnums.java index 0800396..45345bb 100644 --- a/src/main/java/com/sa/zentao/enums/StoryStageEnums.java +++ b/src/main/java/com/sa/zentao/enums/StoryStageEnums.java @@ -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; + } + } diff --git a/src/main/java/com/sa/zentao/enums/StoryStatusEnums.java b/src/main/java/com/sa/zentao/enums/StoryStatusEnums.java new file mode 100644 index 0000000..55a4e1d --- /dev/null +++ b/src/main/java/com/sa/zentao/enums/StoryStatusEnums.java @@ -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; + } + +} diff --git a/src/main/java/com/sa/zentao/service/impl/IZtCountService.java b/src/main/java/com/sa/zentao/service/impl/IZtCountService.java index 33e261a..b06e4a0 100644 --- a/src/main/java/com/sa/zentao/service/impl/IZtCountService.java +++ b/src/main/java/com/sa/zentao/service/impl/IZtCountService.java @@ -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 list = null; List 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 pList = this.productService.listByIds(pIds); diff --git a/src/main/java/com/sa/zentao/service/impl/ZtProjectServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtProjectServiceImpl.java index f018bb3..2267ddc 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtProjectServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtProjectServiceImpl.java @@ -1455,6 +1455,10 @@ public class ZtProjectServiceImpl extends ServiceImpl impl Integer productId = qo.getProductId(); qo.setUserName(RiskUserThreadLocal.get().getName()); List list = this.baseMapper.pageList(qo); + if (!CollectionUtils.isEmpty(list)) { List 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 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 ztProjectList = executionMapByStory.get(d.getId()); if (!CollectionUtils.isEmpty(ztProjectList)) { // d.setExecution(ztProject.getId()); diff --git a/src/main/java/com/sa/zentao/service/impl/ZtStoryUserServiceImpl.java b/src/main/java/com/sa/zentao/service/impl/ZtStoryUserServiceImpl.java index 375f0da..35e05eb 100644 --- a/src/main/java/com/sa/zentao/service/impl/ZtStoryUserServiceImpl.java +++ b/src/main/java/com/sa/zentao/service/impl/ZtStoryUserServiceImpl.java @@ -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> getKanban(Integer productId) { - List ztStoryUsers = this.baseMapper.selectList(new QueryWrapper().lambda().eq(ZtStoryUser::getProduct, productId).orderByDesc(ZtStoryUser::getId)); + List ztStoryUsers = this.baseMapper.selectList(new QueryWrapper() + .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> map = new HashMap<>(); Map stringZtUserMap = this.userService.userMapByIds(ztStoryUsers.stream().map(o -> o.getOpenedby()).collect(Collectors.toList())); @@ -257,6 +266,7 @@ public class ZtStoryUserServiceImpl extends ServiceImpl"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 page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize()); List list = this.baseMapper.pageList(qo); if (!CollectionUtils.isEmpty(list)) { - - List 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 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 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(list); } @@ -509,6 +543,10 @@ public class ZtStoryUserServiceImpl extends ServiceImpl> storyUserMap = getStoryUserMap(Arrays.asList(dto)); List ztStories = storyUserMap.get(d.getId()); if (!CollectionUtils.isEmpty(ztStories)) { diff --git a/src/main/resources/application-dev.yml b/src/main/resources/application-dev.yml index fb9b54b..01e1eb2 100644 --- a/src/main/resources/application-dev.yml +++ b/src/main/resources/application-dev.yml @@ -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: diff --git a/src/main/resources/application-local.yml b/src/main/resources/application-local.yml index ab9efc4..730e172 100644 --- a/src/main/resources/application-local.yml +++ b/src/main/resources/application-local.yml @@ -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 diff --git a/src/main/resources/mapper/ZtStoryMapper.xml b/src/main/resources/mapper/ZtStoryMapper.xml index 04bb38f..68ea2de 100644 --- a/src/main/resources/mapper/ZtStoryMapper.xml +++ b/src/main/resources/mapper/ZtStoryMapper.xml @@ -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} diff --git a/src/main/resources/mapper/ZtStoryUserTaskMapper.xml b/src/main/resources/mapper/ZtStoryUserTaskMapper.xml index 73c2ce2..03a5e0a 100644 --- a/src/main/resources/mapper/ZtStoryUserTaskMapper.xml +++ b/src/main/resources/mapper/ZtStoryUserTaskMapper.xml @@ -90,7 +90,8 @@ - and s.status != 'closed' +-- and s.status != 'closed' + and s.status in ('wait', 'doing')