Compare commits
3 Commits
dev-2025-t
...
3e864a5770
| Author | SHA1 | Date | |
|---|---|---|---|
| 3e864a5770 | |||
| 9a36facf01 | |||
| 3cd02cd773 |
@@ -78,6 +78,7 @@ public class ZtStoryUser implements Serializable {
|
||||
// DQR("storyunconfirmed","需求待确认",8),
|
||||
// CFM("confirmed","需求已确认",9),
|
||||
// KFZ("developing","研发中",10),
|
||||
// KFZ("released","已发布",10),
|
||||
// YWC("finished","已完成",11),
|
||||
// CLOSED("closed","已关闭",12),
|
||||
private String status;
|
||||
|
||||
@@ -2,6 +2,9 @@ package com.sa.zentao.enums;
|
||||
|
||||
import com.baomidou.mybatisplus.annotation.EnumValue;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public enum StoryStageEnums {
|
||||
//closed 关闭 wait 初始化 projected 已立项 developing 研发中 developed 研发完毕 testing 测试中
|
||||
// tested测试完毕 released已发布 verified已验收 closed 已关闭
|
||||
@@ -28,6 +31,17 @@ public enum StoryStageEnums {
|
||||
this.desc=desc;
|
||||
}
|
||||
|
||||
public static List<String> beforeStatus(int code){
|
||||
List<String> list=new ArrayList<String>();
|
||||
StoryStageEnums[] values = values();
|
||||
for (StoryStageEnums value : values) {
|
||||
if (value.code<code&&value.code!=1){
|
||||
list.add(value.value);
|
||||
}
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
public int getCode() {
|
||||
return this.code;
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@ public enum UserStoryEnums {
|
||||
DQR("storyunconfirmed","需求待确认",8),
|
||||
CFM("confirmed","需求已确认",9),
|
||||
KFZ("developing","研发中",10),
|
||||
RELEASED("released","已发布",15),
|
||||
YWC("finished","已完成",11),
|
||||
CLOSED("closed","已关闭",12),
|
||||
;
|
||||
|
||||
@@ -64,6 +64,8 @@ public class ZtProjectQo extends BaseQo {
|
||||
|
||||
private String status;
|
||||
|
||||
private List<String> stageList;
|
||||
|
||||
private String title;
|
||||
|
||||
private Integer module;
|
||||
|
||||
@@ -198,7 +198,8 @@ public class IZtCountService {
|
||||
// if (!name.equals("admin")) {
|
||||
if (!CollectionUtils.isEmpty(pIds)) {
|
||||
list = this.storyUserService.list(new QueryWrapper<ZtStoryUser>().lambda().in(ZtStoryUser::getProduct, pIds)
|
||||
.in(ZtStoryUser::getStatus, "active", "reviewing", "active", "unconfirmed", "waitcommunicate", "waitdesign", "designdoing", "designdone", "storyunconfirmed", "confirmed"));
|
||||
.in(ZtStoryUser::getStatus, "active", "reviewing", "active",
|
||||
"unconfirmed", "waitcommunicate", "waitdesign", "designdoing", "designdone", "storyunconfirmed", "confirmed"));
|
||||
ztStory = storyService.list(new QueryWrapper<ZtStory>()
|
||||
.lambda().eq(ZtStory::getDeleted, "0")
|
||||
.in(ZtStory::getProduct, pIds)
|
||||
@@ -2940,3 +2941,6 @@ public class IZtCountService {
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -1321,6 +1321,10 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
ztStory.setEndDate(new Date());
|
||||
}
|
||||
this.baseMapper.updateById(ztStory);
|
||||
//用户需求
|
||||
if(ztStory.getUserStory()!=null&&ztStory.getUserStory().intValue()!=0){
|
||||
this.storyUserService.changeStatus(ztStory.getUserStory(),UserStoryEnums.RELEASED);
|
||||
}
|
||||
String ysUser = ztStory.getYsUser();
|
||||
|
||||
|
||||
|
||||
@@ -13,10 +13,7 @@ import com.sa.zentao.conf.LoginRiskUser;
|
||||
import com.sa.zentao.conf.RiskUserThreadLocal;
|
||||
import com.sa.zentao.dao.*;
|
||||
import com.sa.zentao.entity.*;
|
||||
import com.sa.zentao.enums.ActionStatus;
|
||||
import com.sa.zentao.enums.ActionType;
|
||||
import com.sa.zentao.enums.FileTypes;
|
||||
import com.sa.zentao.enums.UserStoryEnums;
|
||||
import com.sa.zentao.enums.*;
|
||||
import com.sa.zentao.mapper.ZtStoryUserMapper;
|
||||
import com.sa.zentao.qo.StoryQo;
|
||||
import com.sa.zentao.qo.ZtProjectQo;
|
||||
@@ -305,6 +302,11 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
|
||||
qo.setProductIds(pIds);
|
||||
}
|
||||
|
||||
if(!CollectionUtils.isEmpty(qo.getStatusList())&&qo.getStatusList().contains("unconfirmed")) {
|
||||
qo.getStatusList().addAll(Arrays.asList("unconfirmed",
|
||||
"waitcommunicate","waitdesign","designdoing","designdone","storyunconfirmed"));
|
||||
}
|
||||
|
||||
Page<ZtStoryUserDTO> page = PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize());
|
||||
List<ZtStoryUserDTO> list = this.baseMapper.pageList(qo);
|
||||
if (!CollectionUtils.isEmpty(list)) {
|
||||
@@ -726,6 +728,15 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
|
||||
//交付物确认
|
||||
this.sendConfirmMessage(storyUser.getId(),ztProduct.getPo());
|
||||
}
|
||||
if(UserStoryEnums.RELEASED == status){
|
||||
//如果研发需求已经全部发布,那么就发布
|
||||
// wait 初始化 projected 已立项 developing 研发中 developed 研发完毕 testing 测试中 tested
|
||||
List<ZtStory> storyList = this.storyService.list(new QueryWrapper<ZtStory>().lambda()
|
||||
.ne(ZtStory::getStatus, "closed").in(ZtStory::getStage, StoryStageEnums.beforeStatus(7)).eq(ZtStory::getUserStory, id));
|
||||
if(!CollectionUtils.isEmpty(storyList)){
|
||||
return ;
|
||||
}
|
||||
}
|
||||
storyUser.setStatus(status.getCode());
|
||||
storyUser.setLasteditedby(RiskUserThreadLocal.get().getName());
|
||||
storyUser.setLastediteddate(new Date());
|
||||
|
||||
@@ -179,8 +179,8 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
if (CollectionUtils.isEmpty(taskList)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
taskList=taskList.stream().peek(e->{
|
||||
if(e.getDeadline()!=null){
|
||||
taskList = taskList.stream().peek(e -> {
|
||||
if (e.getDeadline() != null) {
|
||||
e.setDeadline(DateUtils.getDayLast(e.getDeadline()));
|
||||
}
|
||||
}).collect(Collectors.toList());
|
||||
@@ -341,7 +341,7 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
// .and(e->e.or().)
|
||||
// );
|
||||
|
||||
return this.baseMapper.taskListByPIdsAndDate(pids,firstDayOfMonth,lastDayOfMonth);
|
||||
return this.baseMapper.taskListByPIdsAndDate(pids, firstDayOfMonth, lastDayOfMonth);
|
||||
// return taskList;
|
||||
}
|
||||
|
||||
@@ -386,8 +386,8 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
}
|
||||
List<ZtTask> taskList = this.list(new QueryWrapper<ZtTask>().lambda()
|
||||
.select(SFunctionColums.taskColumes())
|
||||
.in(ZtTask::getProduct,pids)
|
||||
.in(ZtTask::getAssignedTo,uids)
|
||||
.in(ZtTask::getProduct, pids)
|
||||
.in(ZtTask::getAssignedTo, uids)
|
||||
.ge(ZtTask::getFinishedDate, firstDayOfMonth).le(ZtTask::getFinishedDate, lastDayOfMonth));
|
||||
|
||||
return taskList;
|
||||
@@ -786,6 +786,44 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
}
|
||||
|
||||
}
|
||||
if (ztTask.getDeadline() != null && ztTask.getStory() != null && ztTask.getStory() != 0) {
|
||||
ZtStory ztStory = this.storyService.getById(ztTask.getStory());
|
||||
ztStory.setDevelPlanEndTime(null);
|
||||
if (ztTask.getType().equals("devel") && (ztStory.getDevelPlanEndTime() == null || ztTask.getDeadline().after(ztStory.getDevelPlanEndTime()))) {
|
||||
ztStory.setDevelPlanEndTime(ztTask.getDeadline());
|
||||
} else {
|
||||
//查找最大时间那个
|
||||
List<ZtTask> ztTasks = this.baseMapper.selectList(new QueryWrapper<ZtTask>().lambda()
|
||||
.select(ZtTask::getDeadline)
|
||||
.isNotNull(ZtTask::getDeadline)
|
||||
.eq(ZtTask::getType, "devel")
|
||||
.ne(ZtTask::getId, ztTask.getId())
|
||||
.in(ZtTask::getStatus, "pause", "done", "wait", "reviewing", "doing", "draft")
|
||||
.eq(ZtTask::getStory, ztTask.getStory()).orderByDesc(ZtTask::getDeadline));
|
||||
this.storyService.update(new UpdateWrapper<ZtStory>().lambda()
|
||||
.eq(ZtStory::getId, ztTask.getStory())
|
||||
.set(ZtStory::getDevelPlanEndTime, CollectionUtils.isEmpty(ztTasks) ? null : DateUtils.getDayLast(ztTasks.get(0).getDeadline())));
|
||||
}
|
||||
if (ztTask.getType().equals("test") && (ztStory.getTestPlanEndTime() == null || ztTask.getDeadline().after(ztStory.getTestPlanEndTime()))) {
|
||||
ztStory.setTestPlanEndTime(ztTask.getDeadline());
|
||||
} else {
|
||||
if (ztTask.getType().equals("test") && ztStory.getTestPlanEndTime() != null) {
|
||||
//查找最大时间那个
|
||||
ztStory.setDevelPlanEndTime(ztTask.getDeadline());
|
||||
List<ZtTask> ztTasks = this.baseMapper.selectList(new QueryWrapper<ZtTask>().lambda()
|
||||
.select(ZtTask::getDeadline)
|
||||
.isNotNull(ZtTask::getDeadline)
|
||||
.eq(ZtTask::getType, "test")
|
||||
.ne(ZtTask::getId, ztTask.getId())
|
||||
.in(ZtTask::getStatus, "pause", "done", "wait", "reviewing", "doing", "draft")
|
||||
.eq(ZtTask::getStory, ztTask.getStory()).orderByDesc(ZtTask::getDeadline));
|
||||
this.storyService.update(new UpdateWrapper<ZtStory>().lambda()
|
||||
.eq(ZtStory::getId, ztTask.getStory())
|
||||
.set(ZtStory::getTestPlanEndTime, CollectionUtils.isEmpty(ztTasks) ? null : DateUtils.getDayLast(ztTasks.get(0).getDeadline())));
|
||||
}
|
||||
}
|
||||
this.storyService.updateById(ztStory);
|
||||
}
|
||||
|
||||
|
||||
fileService.updateFile(dto.getFiles(), ztTask.getId(), FileTypes.task);
|
||||
@@ -814,9 +852,9 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
|
||||
if(ObjectUtils.notEqual(oldExecution,newExecution)){
|
||||
//迭代切换了
|
||||
this.kanbanlaneService.removeKanbanCell(oldExecution,ztTask.getId(),KanbanCellType.TASK);
|
||||
this.kanbanlaneService.removeKanbanCell(oldExecution, ztTask.getId(), KanbanCellType.TASK);
|
||||
//添加新的看板迭代
|
||||
this.kanbanlaneService.addKanbanCell(newExecution,ztTask.getId(),KanbanCellType.TASK,ztTask);
|
||||
this.kanbanlaneService.addKanbanCell(newExecution, ztTask.getId(), KanbanCellType.TASK, ztTask);
|
||||
}
|
||||
taskSendZpMessage(ztTask.getId(), oldAssignedTo, ztTask.getAssignedTo());
|
||||
|
||||
@@ -872,7 +910,7 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
if ("doing".equals(ztTask.getStatus())) {
|
||||
this.storyFeedbackService.feedbackStart(ztTask.getFeedback());
|
||||
} else {
|
||||
this.storyFeedbackService.feedbackFinished(ztTask.getFeedback(),ztTask.getFeedbackRemark());
|
||||
this.storyFeedbackService.feedbackFinished(ztTask.getFeedback(), ztTask.getFeedbackRemark());
|
||||
}
|
||||
}
|
||||
if (dto.getConsumed() > 0) {
|
||||
|
||||
@@ -264,11 +264,16 @@
|
||||
and closedBy =#{qo.userName}
|
||||
</if>
|
||||
|
||||
<if test="qo.stageList != null and qo.stageList.size() > 0">
|
||||
and s.stage in
|
||||
<foreach collection="qo.stageList" item="id" index="index"
|
||||
open="(" close=")" separator=",">
|
||||
#{id}
|
||||
</foreach>
|
||||
|
||||
</if>
|
||||
|
||||
group by s.id
|
||||
|
||||
|
||||
<choose>
|
||||
<when test="qo.orderName != '' and qo.orderName != null ">
|
||||
<choose>
|
||||
@@ -284,20 +289,9 @@
|
||||
order by s.id desc
|
||||
</otherwise>
|
||||
</choose>
|
||||
|
||||
|
||||
|
||||
|
||||
-- order by id desc
|
||||
|
||||
|
||||
</select>
|
||||
<select id="projectStoryPageList" resultType="com.sa.zentao.dao.ZtStoryDTO">
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
select s.id,
|
||||
s.vision,
|
||||
s.parent,
|
||||
@@ -381,6 +375,12 @@
|
||||
WHERE 1=1
|
||||
|
||||
|
||||
<!-- <if test="qo.startDate !=null">-->
|
||||
<!-- and s.openedDate <![CDATA[>=]]> #{qo.startDate}-->
|
||||
<!-- </if>-->
|
||||
<!-- <if test="qo.endDate !=null">-->
|
||||
<!-- and s.openedDate <![CDATA[<=]]> #{qo.endDate}-->
|
||||
<!-- </if>-->
|
||||
<!-- <if test="qo.startDate !=null">-->
|
||||
<!-- and s.openedDate <![CDATA[>=]]> #{qo.startDate}-->
|
||||
<!-- </if>-->
|
||||
@@ -476,7 +476,6 @@
|
||||
</if>
|
||||
|
||||
|
||||
|
||||
<if test="qo.searchVal == 'JH' ">
|
||||
and s.status = 'active'
|
||||
</if>
|
||||
@@ -518,7 +517,7 @@
|
||||
|
||||
<if test="qo.searchCode != null and qo.searchCode != '' ">
|
||||
|
||||
-- //项目名称
|
||||
-- //项目名称
|
||||
<if test="qo.searchCode=='xmmc' and qo.searchValue != null and qo.searchValue != '' ">
|
||||
and pj.name like concat('%', #{qo.searchValue}, '%')
|
||||
</if>
|
||||
@@ -577,7 +576,14 @@
|
||||
</foreach>
|
||||
|
||||
</if>
|
||||
<if test="qo.stageList != null and qo.stageList.size() > 0">
|
||||
and s.stage in
|
||||
<foreach collection="qo.stageList" item="id" index="index"
|
||||
open="(" close=")" separator=",">
|
||||
#{id}
|
||||
</foreach>
|
||||
|
||||
</if>
|
||||
|
||||
group by s.id
|
||||
|
||||
@@ -1046,6 +1052,14 @@
|
||||
|
||||
</if>
|
||||
|
||||
<if test="qo.stageList != null and qo.stageList.size() > 0">
|
||||
and s.stage in
|
||||
<foreach collection="qo.stageList" item="id" index="index"
|
||||
open="(" close=")" separator=",">
|
||||
#{id}
|
||||
</foreach>
|
||||
|
||||
</if>
|
||||
group by s.id
|
||||
|
||||
<choose>
|
||||
|
||||
@@ -162,6 +162,16 @@
|
||||
and s.openedBy = #{qo.openedby}
|
||||
</if>
|
||||
|
||||
<if test="qo.statusList != null and qo.statusList.size() > 0">
|
||||
and s.status in
|
||||
<foreach collection="qo.statusList" item="id" index="index"
|
||||
open="(" close=")" separator=",">
|
||||
#{id}
|
||||
</foreach>
|
||||
|
||||
</if>
|
||||
|
||||
|
||||
|
||||
<if test="qo.status != null and qo.status != '' ">
|
||||
-- 需求明确中、详细设计、详细设计中、产品已设计、需求待确认 这些查询状态合并成 “需求明确中”
|
||||
|
||||
Reference in New Issue
Block a user