用户需求相关
This commit is contained in:
@ -46,7 +46,7 @@ public class DevopsRunner implements Runnable{
|
||||
List<ZtCronDevopsUser> list = cronDevopsUserService.list(new QueryWrapper<ZtCronDevopsUser>().lambda().eq(ZtCronDevopsUser::getDevopsId, d.getId()));
|
||||
if(!CollectionUtils.isEmpty(list)){
|
||||
for (ZtCronDevopsUser u:list) {
|
||||
SendEmail.sendMail(u.getMail(),"尊敬的"+u.getUsername()+d.getContent());
|
||||
SendEmail.sendMail(u.getMail(),"尊敬的"+u.getUsername()+d.getContent(),null);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -79,6 +79,7 @@ public class ParamOutAspect {
|
||||
Object proceed=null;
|
||||
try {
|
||||
proceed = joinPoint.proceed();
|
||||
|
||||
}catch (Exception e){
|
||||
log.error("",e);
|
||||
throw new BusinessException(e.getMessage());
|
||||
@ -94,8 +95,9 @@ public class ParamOutAspect {
|
||||
// }
|
||||
// }
|
||||
|
||||
//17462126
|
||||
|
||||
log.info("[AOP-LOG-END-返回]\n\t{}", proceed);
|
||||
log.info("[AOP-LOG-END-返回 ]\n\t{} {} size=", proceed,proceed==null?null:proceed.toString().length());
|
||||
return proceed;
|
||||
}
|
||||
|
||||
|
@ -94,7 +94,7 @@ public class ZtReleaseController {
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
//发布
|
||||
@RequestMapping(value = "/release", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
|
||||
public Result release(@RequestBody ZtReleaseQo dto){
|
||||
releaseService.release(dto);
|
||||
|
@ -1,15 +1,18 @@
|
||||
package com.sa.zentao.controller;
|
||||
|
||||
|
||||
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.entity.ZtStoryUser;
|
||||
import com.sa.zentao.enums.UserStoryEnums;
|
||||
import com.sa.zentao.qo.StoryQo;
|
||||
import com.sa.zentao.qo.ZtProjectQo;
|
||||
import com.sa.zentao.service.IZtStoryUserService;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.web.bind.annotation.RequestBody;
|
||||
@ -71,10 +74,15 @@ public class ZtStoryUserController {
|
||||
|
||||
@RequestMapping(value = "/storyList", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
|
||||
public Result storyList(@RequestBody StoryQo qo){
|
||||
|
||||
List<ZtStoryUser> list = storyUserService.list(new QueryWrapper<ZtStoryUser>()
|
||||
.lambda().eq(ZtStoryUser::getProduct,qo.getId()).in(ZtStoryUser::getStatus, "wait","active")
|
||||
.orderByDesc(ZtStoryUser::getId)
|
||||
LambdaQueryWrapper<ZtStoryUser> eq = new QueryWrapper<ZtStoryUser>()
|
||||
.lambda().eq(ZtStoryUser::getProduct, qo.getId())
|
||||
.orderByDesc(ZtStoryUser::getId);
|
||||
if(CollectionUtils.isEmpty( qo.getStatusList())){
|
||||
eq.notIn(ZtStoryUser::getStatus,UserStoryEnums.CLOSED.getCode());
|
||||
}else {
|
||||
eq.in(ZtStoryUser::getStatus, UserStoryEnums.CFM.getCode(),UserStoryEnums.KFZ.getCode());
|
||||
}
|
||||
List<ZtStoryUser> list = storyUserService.list(eq
|
||||
);
|
||||
return Result.success(list);
|
||||
}
|
||||
|
@ -62,6 +62,12 @@ public class ZtStoryUserTaskController {
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/addRemark", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
|
||||
public Result addRemark(@RequestBody ZtStoryUserTaskDTO dto){
|
||||
storyUserTaskService.addRemark(dto);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/getUserStoryTaskById", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
|
||||
public Result getUserStoryTaskById(@RequestBody ZtProjectQo qo){
|
||||
return Result.success(storyUserTaskService.getUserStoryTaskById(qo));
|
||||
@ -73,6 +79,10 @@ public class ZtStoryUserTaskController {
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
|
||||
@RequestMapping(value = "/assignedTo", method = RequestMethod.POST, produces = "application/json; charset=UTF-8")
|
||||
public Result assignedTo(@RequestBody ZtStoryUserTaskDTO dto){
|
||||
storyUserTaskService.assignedTo(dto);
|
||||
return Result.success();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -309,15 +309,15 @@ public class ZtTaskController {
|
||||
}
|
||||
List<ZtStoryspec> listSpec = storyspecService.getPrdById(oldStory.getId());
|
||||
|
||||
ZtStory newStory = storyService.getById(oldStory.getId());
|
||||
if(newStory!=null){
|
||||
continue;
|
||||
}
|
||||
if(!CollectionUtils.isEmpty(listSpec)){
|
||||
ZtStoryspec ztStoryspec = listSpec.get(0);
|
||||
ztStoryspec.setFiles(null);
|
||||
storyspecService.save(ztStoryspec);
|
||||
}
|
||||
// ZtStory newStory = storyService.getById(oldStory.getId());
|
||||
// if(newStory!=null){
|
||||
// continue;
|
||||
// }
|
||||
// if(!CollectionUtils.isEmpty(listSpec)){
|
||||
// ZtStoryspec ztStoryspec = listSpec.get(0);
|
||||
// ztStoryspec.setFiles(null);
|
||||
// storyspecService.save(ztStoryspec);
|
||||
// }
|
||||
|
||||
List<String> userList=new ArrayList();
|
||||
|
||||
@ -409,10 +409,10 @@ public class ZtTaskController {
|
||||
|
||||
|
||||
//创建新的需求
|
||||
oldStory.setProduct(product);
|
||||
oldStory.setStage("wait");
|
||||
oldStory.setStatus("active");
|
||||
storyService.save(oldStory);
|
||||
// oldStory.setProduct(product);
|
||||
// oldStory.setStage("wait");
|
||||
// oldStory.setStatus("active");
|
||||
// storyService.save(oldStory);
|
||||
//项目关联需求
|
||||
ZtProjectDTO dto=new ZtProjectDTO();
|
||||
dto.setStoryIds(new ArrayList<>(){
|
||||
@ -421,7 +421,12 @@ public class ZtTaskController {
|
||||
}
|
||||
});
|
||||
dto.setProject(project);
|
||||
try {
|
||||
this.projectService.projectSyncStory(dto);
|
||||
}catch (Exception e){
|
||||
log.error("",e);
|
||||
}
|
||||
|
||||
|
||||
for (ZtProjectstory st:oldPStoryList) {
|
||||
ZtProjectDTO pro = this.projectService.selectPrdById(st.getProject());
|
||||
@ -432,7 +437,12 @@ public class ZtTaskController {
|
||||
if(!CollectionUtils.isEmpty(newExec)){
|
||||
ZtProject project1 = newExec.get(0);
|
||||
dto.setExcludeId(project1.getId());
|
||||
try {
|
||||
this.projectService.executionSyncStory(dto);
|
||||
}catch (Exception e){
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -103,6 +103,8 @@ public class ZtUserController {
|
||||
return Result.success(new ArrayList<>());
|
||||
}
|
||||
eq.in(ZtUser::getAccount,execution.stream().map(o->o.getAccount()).collect(Collectors.toList()));
|
||||
}else{
|
||||
this.userMapper.selectOne(new QueryWrapper<ZtUser>().lambda().eq(ZtUser::getAccount,RiskUserThreadLocal.get().getName()));
|
||||
}
|
||||
|
||||
return Result.success(userService.list(eq
|
||||
|
@ -119,4 +119,5 @@ public class ZtStoryUserTaskDTO implements Serializable {
|
||||
|
||||
private String status;
|
||||
|
||||
private String desc;
|
||||
}
|
||||
|
@ -56,6 +56,7 @@ public class ZtRelease implements Serializable {
|
||||
private String mailto;
|
||||
|
||||
private String notify;
|
||||
//active 激活
|
||||
//reviewing待评审
|
||||
//waitRelease 待发布
|
||||
//released 发不成功
|
||||
|
@ -27,7 +27,7 @@ public class ZtReleaseDetails implements Serializable {
|
||||
private Integer releaseId;
|
||||
|
||||
private Integer objectId;
|
||||
//story
|
||||
//story bug
|
||||
private String objectType;
|
||||
// released已发布 closed 关闭
|
||||
private String status;
|
||||
|
@ -202,4 +202,6 @@ public class ZtStoryUser implements Serializable {
|
||||
private Date psDate;
|
||||
|
||||
private String deliverRemark;
|
||||
|
||||
private String oldStatus;
|
||||
}
|
||||
|
@ -4,30 +4,32 @@ import com.baomidou.mybatisplus.annotation.EnumValue;
|
||||
|
||||
public enum UserStoryEnums {
|
||||
|
||||
DPS("reviewing", "待评审"),
|
||||
CG("draft", "草稿"),
|
||||
JH("active", "激活"),
|
||||
UNCFM("unconfirmed", "产品确认中"),
|
||||
DGT("waitcommunicate", "待沟通"),
|
||||
DPS("reviewing", "待评审",0),
|
||||
CG("draft", "草稿",1),
|
||||
JH("active", "激活",2),
|
||||
UNCFM("unconfirmed", "产品确认中",3),
|
||||
DGT("waitcommunicate", "待沟通",4),
|
||||
|
||||
DSJ("waitdesign","需求待设计"),
|
||||
XXSJZ("designdoing","详细设计中"),
|
||||
CPYSJ("designdone","产品已设计"),
|
||||
DSJ("waitdesign","需求待设计",5),
|
||||
XXSJZ("designdoing","详细设计中",6),
|
||||
CPYSJ("designdone","产品已设计",7),
|
||||
//待确认
|
||||
DQR("storyunconfirmed","需求待确认"),
|
||||
CFM("confirmed","需求已确认"),
|
||||
KFZ("developing","研发中"),
|
||||
YWC("finished","已完成"),
|
||||
CLOSED("closed","已关闭"),
|
||||
DQR("storyunconfirmed","需求待确认",8),
|
||||
CFM("confirmed","需求已确认",9),
|
||||
KFZ("developing","研发中",10),
|
||||
YWC("finished","已完成",11),
|
||||
CLOSED("closed","已关闭",12),
|
||||
;
|
||||
|
||||
@EnumValue
|
||||
private String code;
|
||||
private String value;
|
||||
private Integer index;
|
||||
|
||||
private UserStoryEnums(String code, String value) {
|
||||
private UserStoryEnums(String code, String value,Integer index) {
|
||||
this.code = code;
|
||||
this.value = value;
|
||||
this.index = index;
|
||||
}
|
||||
|
||||
public static UserStoryEnums transfer(String code){
|
||||
@ -48,4 +50,8 @@ public enum UserStoryEnums {
|
||||
return this.value;
|
||||
}
|
||||
|
||||
public Integer getIndex(){
|
||||
return index;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -23,6 +23,8 @@ public class StoryQo extends BaseQo {
|
||||
private String status;
|
||||
private List<Integer> productIds;
|
||||
|
||||
private List<String> statusList;
|
||||
|
||||
private String ids;
|
||||
|
||||
private List<String> storyIds;
|
||||
|
@ -6,6 +6,7 @@ import com.sa.zentao.dao.ZtStoryUserDTO;
|
||||
import com.sa.zentao.entity.ZtProject;
|
||||
import com.sa.zentao.entity.ZtStory;
|
||||
import com.baomidou.mybatisplus.extension.service.IService;
|
||||
import com.sa.zentao.enums.TaskType;
|
||||
import com.sa.zentao.qo.ZtProjectQo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
@ -46,7 +47,8 @@ public interface IZtStoryService extends IService<ZtStory> {
|
||||
PageInfo<ZtStoryDTO> projectStoryPageList(ZtProjectQo qo);
|
||||
|
||||
List<ZtStoryDTO> storyNoSyncProject(ZtProjectQo qo);
|
||||
|
||||
//未开始
|
||||
void waitStory(Integer story);
|
||||
void startStory(Integer story);
|
||||
//开发完成
|
||||
void finishStory(Integer story,String finishBy);
|
||||
@ -57,7 +59,7 @@ public interface IZtStoryService extends IService<ZtStory> {
|
||||
//发布
|
||||
void releaseStory(Integer story);
|
||||
|
||||
void taskFinishChangeStatus(Integer story,String finishBy);
|
||||
void taskFinishChangeStatus(Integer story, String finishBy, TaskType type,Boolean cancelFlag);
|
||||
|
||||
|
||||
void changeStatus(ZtStoryDTO dto);
|
||||
|
@ -44,6 +44,8 @@ public interface IZtStoryUserService extends IService<ZtStoryUser> {
|
||||
|
||||
void changeStatus(Integer id, UserStoryEnums status);
|
||||
|
||||
void storyFinishedChangeStatus(Integer id, UserStoryEnums status);
|
||||
|
||||
void improveStory(ZtStoryUserDTO dto);
|
||||
|
||||
void confirmStory(ZtStoryUserDTO dto);
|
||||
|
@ -31,4 +31,10 @@ public interface IZtStoryUserTaskService extends IService<ZtStoryUserTask> {
|
||||
void finishedTask(ZtStoryUserTaskDTO dto);
|
||||
|
||||
ZtStoryUserTaskDTO getUserStoryTaskById(ZtProjectQo qo);
|
||||
|
||||
void addRemark(ZtStoryUserTaskDTO dto);
|
||||
|
||||
void assignedTo(ZtStoryUserTaskDTO dto);
|
||||
|
||||
void closedAll(Integer id);
|
||||
}
|
||||
|
@ -17,10 +17,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.ProjectTypeEnums;
|
||||
import com.sa.zentao.enums.TaskStatus;
|
||||
import com.sa.zentao.enums.TaskType;
|
||||
import com.sa.zentao.enums.UserType;
|
||||
import com.sa.zentao.enums.*;
|
||||
import com.sa.zentao.qo.ZtCountQo;
|
||||
import com.sa.zentao.qo.ZtProjectQo;
|
||||
import com.sa.zentao.qo.ZtUserQo;
|
||||
@ -310,7 +307,8 @@ public class IZtCountService {
|
||||
}else{
|
||||
list = this.productService.listByIds(pIds);
|
||||
storyUsers =CollectionUtils.isEmpty(list)?new ArrayList<>(): this.storyUserService.list(new QueryWrapper<ZtStoryUser>().lambda()
|
||||
.in(ZtStoryUser::getStatus, "active", "reviewing")
|
||||
.notIn(ZtStoryUser::getStatus,
|
||||
UserStoryEnums.CLOSED.getCode(),UserStoryEnums.YWC.getCode())
|
||||
.in(ZtStoryUser::getProduct,list.stream().map(o->o.getId()).collect(Collectors.toList()))
|
||||
// .eq(ZtStoryUser::getAssignedto,loginRiskUser.getName())
|
||||
.eq(ZtStoryUser::getOpenedby,loginRiskUser.getName())
|
||||
@ -391,7 +389,7 @@ public class IZtCountService {
|
||||
|
||||
|
||||
|
||||
List<ZtProduct> pList = this.productService.list(new QueryWrapper<ZtProduct>().lambda().in(ZtProduct::getProgram, pIds));
|
||||
List<ZtProduct> pList = this.productService.listByIds(pIds);
|
||||
|
||||
List<ZtStoryUser> storyUsers = this.storyUserService.list(new QueryWrapper<ZtStoryUser>().lambda()
|
||||
.in(ZtStoryUser::getStatus, "active", "reviewing")
|
||||
|
@ -108,7 +108,7 @@ public class ZtBugServiceImpl extends ServiceImpl<ZtBugMapper, ZtBug> implements
|
||||
|
||||
result = this.baseMapper.bugPageList(qo);
|
||||
}else if("execution".equals(qo.getSource())){
|
||||
qo.setExecution(qo.getProject().toString());
|
||||
qo.setExecution(qo.getExecution().toString());
|
||||
qo.setProject(null);
|
||||
result = this.baseMapper.bugPageList(qo);
|
||||
}else if("project".equals(qo.getSource())){
|
||||
|
@ -1206,10 +1206,15 @@ public class ZtProjectServiceImpl extends ServiceImpl<ZtProjectMapper, ZtProject
|
||||
// 任务 T3 T4
|
||||
List<ZtProject> ztProjects = this.listByIds(execList.stream().map(o -> o.getExecution()).collect(Collectors.toList()));
|
||||
ztProjects = ztProjects.stream().filter(o ->
|
||||
(firstDayOfMonth.getTime() >= o.getBegin().getTime() && lastDayOfMonth.getTime() > o.getEnd().getTime()) ||
|
||||
(firstDayOfMonth.getTime() <= o.getBegin().getTime() && lastDayOfMonth.getTime() >= o.getEnd().getTime()) ||
|
||||
(firstDayOfMonth.getTime() <= o.getBegin().getTime() && lastDayOfMonth.getTime() <= o.getEnd().getTime())
|
||||
(o.getBegin().getTime() >= firstDayOfMonth.getTime()
|
||||
&& o.getEnd().getTime() <= lastDayOfMonth.getTime()) || (
|
||||
o.getEnd().getTime() >= firstDayOfMonth.getTime()
|
||||
&& o.getEnd().getTime() <= lastDayOfMonth.getTime()
|
||||
)
|
||||
|
||||
).collect(Collectors.toList());
|
||||
|
||||
|
||||
if (CollectionUtils.isEmpty(ztProjects)) {
|
||||
return map;
|
||||
}
|
||||
@ -1725,9 +1730,19 @@ public class ZtProjectServiceImpl extends ServiceImpl<ZtProjectMapper, ZtProject
|
||||
if (CollectionUtils.isEmpty(ztProjects)) {
|
||||
return new PageInfo<>();
|
||||
}
|
||||
List<Integer> execFilterList = ztProjects.stream().filter(o -> (o.getBegin().getTime() >= firstDayOfMonth.getTime()
|
||||
&& o.getBegin().getTime() <= lastDayOfMonth.getTime()) || (
|
||||
o.getEnd().getTime() >= firstDayOfMonth.getTime()
|
||||
&& o.getEnd().getTime() <= lastDayOfMonth.getTime()
|
||||
)
|
||||
|
||||
)
|
||||
.map(o -> o.getId()).collect(Collectors.toList());
|
||||
if(CollectionUtils.isEmpty(execFilterList)){
|
||||
return new PageInfo<>();
|
||||
}
|
||||
List<ZtTeam> teams = this.teamService.list(new QueryWrapper<ZtTeam>().lambda().eq(ZtTeam::getType, "execution")
|
||||
.in(ZtTeam::getRoot, ztProjects.stream().map(o -> o.getId()).collect(Collectors.toList())));
|
||||
.in(ZtTeam::getRoot, execFilterList));
|
||||
|
||||
List<String> accountIds = teams.stream().map(o -> o.getAccount()).distinct().collect(Collectors.toList());
|
||||
if (CollectionUtils.isEmpty(accountIds)) {
|
||||
|
@ -103,6 +103,7 @@ public class ZtReleaseServiceImpl extends ServiceImpl<ZtReleaseMapper, ZtRelease
|
||||
if(!CollectionUtils.isEmpty(sList)){
|
||||
List<ZtReleaseDetails> releaseStoryList = this.releaseDetailsService.list(new QueryWrapper<ZtReleaseDetails>().lambda()
|
||||
.ne(ZtReleaseDetails::getStatus,"closed")
|
||||
.eq(ZtReleaseDetails::getObjectType,"story")
|
||||
.in(ZtReleaseDetails::getObjectId, sList.stream().map(o -> o.getId()).collect(Collectors.toList())));
|
||||
List<Integer> sIds = releaseStoryList.stream().map(o -> o.getObjectId().intValue()).collect(Collectors.toList());
|
||||
|
||||
|
@ -60,6 +60,17 @@ public class ZtStoryFeedbackServiceImpl extends ServiceImpl<ZtStoryFeedbackMappe
|
||||
@Autowired
|
||||
private IZtFileService fileService;
|
||||
|
||||
@Autowired
|
||||
private CommonsController commonsController;
|
||||
@Autowired
|
||||
private VxService vxService;
|
||||
|
||||
@Autowired
|
||||
private IZtProjectService projectService;
|
||||
|
||||
@Autowired
|
||||
private IZtProductService productService;
|
||||
|
||||
@Override
|
||||
public PageInfo<ZtStoryFeedbackDTO> pageList(ZtProjectQo qo) {
|
||||
|
||||
@ -105,8 +116,6 @@ public class ZtStoryFeedbackServiceImpl extends ServiceImpl<ZtStoryFeedbackMappe
|
||||
return ztStories.stream().collect(Collectors.toMap(ZtStory::getId, o -> o));
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private CommonsController commonsController;
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
@ -177,8 +186,7 @@ public class ZtStoryFeedbackServiceImpl extends ServiceImpl<ZtStoryFeedbackMappe
|
||||
RiskUserThreadLocal.get().getName(), null, "");
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private VxService vxService;
|
||||
|
||||
|
||||
@Override
|
||||
public void changeStatus(ZtStoryFeedbackDTO dto) {
|
||||
@ -248,10 +256,6 @@ public class ZtStoryFeedbackServiceImpl extends ServiceImpl<ZtStoryFeedbackMappe
|
||||
RiskUserThreadLocal.get().getName(), dto.getDesc(), ztStoryFeedback.getAssignedTo());
|
||||
}
|
||||
|
||||
@Autowired
|
||||
private IZtProjectService projectService;
|
||||
@Autowired
|
||||
private IZtProductService productService;
|
||||
|
||||
@Override
|
||||
public List<ZtStoryFeedbackDTO> ztStoryFeedbackDTO(ZtProjectQo qo) {
|
||||
@ -437,7 +441,9 @@ public class ZtStoryFeedbackServiceImpl extends ServiceImpl<ZtStoryFeedbackMappe
|
||||
ztStoryFeedback.setCloseDate(new Date());
|
||||
ztStoryFeedback.setClosedBy(RiskUserThreadLocal.get().getName());
|
||||
this.baseMapper.updateById(ztStoryFeedback);
|
||||
|
||||
//添加action
|
||||
actionService.addAction(ActionType.WTFK, ActionStatus.GB, ztStoryFeedback.getId(), ztStoryFeedback.getProduct() + "", null, null,
|
||||
RiskUserThreadLocal.get().getName(), dto.getCloseRemark(), null);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -549,6 +555,13 @@ public class ZtStoryFeedbackServiceImpl extends ServiceImpl<ZtStoryFeedbackMappe
|
||||
}
|
||||
ztStoryFeedback.setStatus("submitVerified");
|
||||
this.baseMapper.updateById(ztStoryFeedback);
|
||||
|
||||
if (!org.apache.commons.lang3.StringUtils.isEmpty(ztStoryFeedback.getOpenSource()) && ztStoryFeedback.getOpenSource().equals("weixin")) {
|
||||
StringBuilder b = new StringBuilder();
|
||||
b.append("您反馈的").append(ztStoryFeedback.getName()).append(" 的问题已提交验收,请及时登陆系统验收。");
|
||||
vxService.sendMessageToVx(ztStoryFeedback.getWeixin(), b.toString(), new Date());
|
||||
}
|
||||
|
||||
actionService.addAction(ActionType.WTFK, ActionStatus.TJYS, ztStoryFeedback.getId(), ztStoryFeedback.getProduct() + "", null, null,
|
||||
RiskUserThreadLocal.get().getName(), dto.getDesc(), ztStoryFeedback.getAssignedTo());
|
||||
}
|
||||
|
@ -21,6 +21,8 @@ import com.sa.zentao.service.*;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.sa.zentao.utils.BeanCopyUtil;
|
||||
import com.sa.zentao.utils.BeanCopyUtilCallBack;
|
||||
import com.sa.zentao.utils.SendEmail;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -198,23 +200,13 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
if (!storyFeedback.getStatus().equals("wait")) {
|
||||
throw new BusinessException("问题反馈已被处理");
|
||||
}
|
||||
// storyFeedback.setStatus("doing");
|
||||
// storyFeedback.setStoryId(s.getId());
|
||||
// storyFeedback.setUpdateDate(new Date());
|
||||
// storyFeedback.setUpdateUser(RiskUserThreadLocal.get().getName());
|
||||
// this.storyFeedbackService.updateById(storyFeedback);
|
||||
}
|
||||
if (dto.getUserStory() != null && dto.getUserStory() != 0) {
|
||||
ZtStoryUser storyUser = storyUserService.getById(dto.getUserStory());
|
||||
if (storyUser != null && "wait".equals(storyUser.getStatus())) {
|
||||
storyUser.setStatus("active");
|
||||
} else if (storyUser != null && "active".equals(storyUser.getStatus())) {
|
||||
if (storyUser.getStatus().equals("active") && storyUser.getStage().equals("wait")) {
|
||||
storyUser.setStage("projected");
|
||||
if(storyUser.getStatus().equals(UserStoryEnums.CFM.getCode())){
|
||||
storyUserService.storyFinishedChangeStatus(storyUser.getId(),UserStoryEnums.KFZ);
|
||||
}
|
||||
}
|
||||
storyUserService.updateById(storyUser);
|
||||
}
|
||||
|
||||
actionService.addAction(ActionType.XQ, ActionStatus.XJ, s.getId(), "", dto.getProduct(), null,
|
||||
RiskUserThreadLocal.get().getName(), "", "");
|
||||
@ -286,8 +278,8 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
if(ztStoryUser==null){
|
||||
throw new BusinessException("未查询到用户需求");
|
||||
}
|
||||
if(UserStoryEnums.transfer(ztStoryUser.getStatus())!=UserStoryEnums.CFM ){
|
||||
throw new BusinessException("无法关联未确认的需求");
|
||||
if(!Arrays.asList(UserStoryEnums.CFM.getCode(),UserStoryEnums.KFZ.getCode()).contains(ztStoryUser.getStatus())){
|
||||
throw new BusinessException("用户需求无法关联请检查");
|
||||
}
|
||||
}
|
||||
ZtStory s = new ZtStory();
|
||||
@ -494,7 +486,10 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
executionUnBindStory(storyId, execList.stream().map(o -> o.getProject()).collect(Collectors.toList()));
|
||||
}
|
||||
}
|
||||
|
||||
//old userStory
|
||||
Integer userStory = ztStory.getUserStory();
|
||||
//new
|
||||
Integer newUserStory = dto.getUserStory();
|
||||
|
||||
BeanUtils.copyProperties(dto, ztStory, "stage");
|
||||
if ("draft".equalsIgnoreCase(ztStory.getStatus())) {
|
||||
@ -539,6 +534,15 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
}
|
||||
this.baseMapper.updateById(ztStory);
|
||||
|
||||
if(ObjectUtils.notEqual(userStory,newUserStory)){
|
||||
if(userStory!=null&&userStory!=0){
|
||||
this.storyUserService.storyFinishedChangeStatus(userStory,UserStoryEnums.YWC);
|
||||
}
|
||||
if(newUserStory!=null&&newUserStory!=0){
|
||||
this.storyUserService.storyFinishedChangeStatus(newUserStory,UserStoryEnums.KFZ);
|
||||
}
|
||||
}
|
||||
|
||||
fileService.updateFile(dto.getFiles(), ztStory.getId(), FileTypes.story);
|
||||
|
||||
List<String> userViewId = dto.getUserViewId();
|
||||
@ -935,6 +939,31 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
return BeanCopyUtil.copyListProperties(ztStories, ZtStoryDTO::new);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void waitStory(Integer id){
|
||||
if (id == null || id == 0) {
|
||||
return;
|
||||
}
|
||||
ZtStory ztStory = this.baseMapper.selectById(id);
|
||||
|
||||
if ("closed".equals(ztStory.getStatus())) {
|
||||
throw new BusinessException("需求当前已关闭");
|
||||
}
|
||||
|
||||
|
||||
ztStory.setStage("wait");
|
||||
ztStory.setStartDate(new Date());
|
||||
this.baseMapper.updateById(ztStory);
|
||||
List<Integer> executionId = getExecutionId(ztStory);
|
||||
for (Integer execution : executionId) {
|
||||
kanbanlaneService.changeStatus(execution, id, "story", "ready");
|
||||
}
|
||||
|
||||
//
|
||||
// actionService.addAction(ActionType.XQ, ActionStatus.KS, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), null,
|
||||
// RiskUserThreadLocal.get().getName(), null, "");
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
@ -948,15 +977,15 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
throw new BusinessException("需求当前已关闭");
|
||||
}
|
||||
|
||||
List<String> stateList = Arrays.asList("wait", "projected");
|
||||
|
||||
|
||||
if ("active".equalsIgnoreCase(ztStory.getStatus())) {
|
||||
if (!stateList.contains(ztStory.getStage())) {
|
||||
//已经开始
|
||||
return;
|
||||
}
|
||||
}
|
||||
// List<String> stateList = Arrays.asList("wait", "projected");
|
||||
//
|
||||
//
|
||||
// if ("active".equalsIgnoreCase(ztStory.getStatus())) {
|
||||
// if (!stateList.contains(ztStory.getStage())) {
|
||||
// //已经开始
|
||||
// return;
|
||||
// }
|
||||
// }
|
||||
|
||||
ztStory.setStage("developing");
|
||||
ztStory.setStartDate(new Date());
|
||||
@ -985,55 +1014,56 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
|
||||
|
||||
ZtStory ztStory = this.baseMapper.selectById(id);
|
||||
if (ztStory.getFeedback() != null && ztStory.getFeedback() != 0) {
|
||||
this.storyFeedbackService.feedbackStart(ztStory.getFeedback());
|
||||
}
|
||||
|
||||
if (ztStory == null) {
|
||||
throw new BusinessException("未查询到需求");
|
||||
}
|
||||
|
||||
List<ZtTask> taskList = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, id)
|
||||
.in(ZtTask::getStatus, Arrays.asList("reviewing", "wait", "doing", "pause"))
|
||||
.eq(ZtTask::getType, "devel")
|
||||
);
|
||||
//任务没有做完 如果任务还没开始
|
||||
if (!CollectionUtils.isEmpty(taskList)) {
|
||||
if (Arrays.asList("wait", "projected").contains(ztStory.getStage())) {
|
||||
|
||||
this.taskFinishChangeStatus(id,null);
|
||||
}
|
||||
return;
|
||||
}
|
||||
//developed 研发完毕 testing 测试中 tested测试完毕 released已发布 verified已验收 closed
|
||||
if (Arrays.asList("developed", "tested", "released", "verified", "closed").contains(ztStory.getStage())) {
|
||||
return;
|
||||
}
|
||||
if ("testing".equals(ztStory.getStage())) {
|
||||
List<ZtTask> list = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, id)
|
||||
.in(ZtTask::getStatus, Arrays.asList("wait", "doing", "pause"))
|
||||
.in(ZtTask::getType, "devel", "test")
|
||||
);
|
||||
if (!CollectionUtils.isEmpty(list)) {
|
||||
return;
|
||||
} else {
|
||||
ztStory.setStage("tested");
|
||||
this.baseMapper.updateById(ztStory);
|
||||
List<Integer> executionId = this.getExecutionId(ztStory);
|
||||
for (Integer execution : executionId) {
|
||||
kanbanlaneService.changeStatus(execution, id, "story", "tested");
|
||||
if (ztStory.getFeedback() != null && ztStory.getFeedback() != 0) {
|
||||
this.storyFeedbackService.feedbackStart(ztStory.getFeedback());
|
||||
}
|
||||
|
||||
actionService.addAction(ActionType.XQ, ActionStatus.CSWC, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), null,
|
||||
RiskUserThreadLocal.get().getName(), null, "");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (Arrays.asList("wait").contains(ztStory.getStage()) && !CollectionUtils.isEmpty(taskList)) {
|
||||
this.taskFinishChangeStatus(id,null);
|
||||
return;
|
||||
}
|
||||
// List<ZtTask> taskList = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, id)
|
||||
// .in(ZtTask::getStatus, Arrays.asList("reviewing", "wait", "doing", "pause"))
|
||||
// .eq(ZtTask::getType, "devel")
|
||||
// );
|
||||
// //任务没有做完 如果任务还没开始
|
||||
// if (!CollectionUtils.isEmpty(taskList)) {
|
||||
// if (Arrays.asList("wait", "projected").contains(ztStory.getStage())) {
|
||||
//
|
||||
// this.taskFinishChangeStatus(id,null);
|
||||
// }
|
||||
// return;
|
||||
// }
|
||||
// //developed 研发完毕 testing 测试中 tested测试完毕 released已发布 verified已验收 closed
|
||||
// if (Arrays.asList("developed", "tested", "released", "verified", "closed").contains(ztStory.getStage())) {
|
||||
// return;
|
||||
// }
|
||||
// if ("testing".equals(ztStory.getStage())) {
|
||||
// List<ZtTask> list = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, id)
|
||||
// .in(ZtTask::getStatus, Arrays.asList("wait", "doing", "pause"))
|
||||
// .in(ZtTask::getType, "devel", "test")
|
||||
// );
|
||||
// if (!CollectionUtils.isEmpty(list)) {
|
||||
// return;
|
||||
// } else {
|
||||
// ztStory.setStage("tested");
|
||||
// this.baseMapper.updateById(ztStory);
|
||||
// List<Integer> executionId = this.getExecutionId(ztStory);
|
||||
// for (Integer execution : executionId) {
|
||||
// kanbanlaneService.changeStatus(execution, id, "story", "tested");
|
||||
// }
|
||||
//
|
||||
// actionService.addAction(ActionType.XQ, ActionStatus.CSWC, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), null,
|
||||
// RiskUserThreadLocal.get().getName(), null, "");
|
||||
// }
|
||||
// return;
|
||||
// }
|
||||
//
|
||||
// if (Arrays.asList("wait").contains(ztStory.getStage()) && !CollectionUtils.isEmpty(taskList)) {
|
||||
// this.taskFinishChangeStatus(id,null);
|
||||
// return;
|
||||
// }
|
||||
|
||||
ztStory.setStage("developed");
|
||||
if (ztStory.getStartDate() == null) {
|
||||
@ -1175,6 +1205,25 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
ztStory.setEndDate(new Date());
|
||||
}
|
||||
this.baseMapper.updateById(ztStory);
|
||||
String ysUser = ztStory.getYsUser();
|
||||
if(!StringUtils.isEmpty(ysUser)){
|
||||
ZtUser ztUser = this.userService.selectByName(ysUser);
|
||||
if(ztUser!=null&&!StringUtils.isEmpty(ztUser.getEmail())){
|
||||
try {
|
||||
StringBuilder b=new StringBuilder();
|
||||
b.append("<div>尊敬的{userName}:</div>");
|
||||
b.append("<div>您的需求 \"{id} {name}\"、\"{id} {name}\" 已发布,请及时登录系统验收。</div>");
|
||||
String str = b.toString();
|
||||
str= str.replace("{userName}",ztUser.getNickname());
|
||||
str=str.replace("{id}",ztStory.getId().toString());
|
||||
str=str.replace("{name}",ztStory.getTitle());
|
||||
SendEmail.sendMail(ztUser.getEmail(),str,"需求发布提醒");
|
||||
}catch (Exception e){
|
||||
log.error("",e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
for (Integer execId : execIds) {
|
||||
if (execId != null) {
|
||||
@ -1202,77 +1251,209 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
actionService.addAction(ActionType.XQ, ActionStatus.FBCG, ztStory.getId(), ztStory.getProduct() + "", ztStory.getProject(), execIds.get(0),
|
||||
RiskUserThreadLocal.get().getName(), null, "");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void taskFinishChangeStatus(Integer story, String finishBy) {
|
||||
public void taskFinishChangeStatus(Integer story, String finishBy,TaskType type,Boolean cancelFlag) {
|
||||
if(type!=TaskType.test&&type!=TaskType.devel){
|
||||
return;
|
||||
}
|
||||
if(story==null||story==0){
|
||||
return;
|
||||
}
|
||||
ZtStory ztStory = this.baseMapper.selectById(story);
|
||||
|
||||
List<ZtTask> taskList = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, story)
|
||||
if(cancelFlag&&type==TaskType.devel){
|
||||
List<ZtTask> develList = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, story)
|
||||
.in(ZtTask::getStatus, Arrays.asList( "wait", "doing", "pause"))
|
||||
.eq(ZtTask::getType, "devel"));
|
||||
//如果开发有任务 并且状态需要变为开发中
|
||||
if(!CollectionUtils.isEmpty(taskList)&&Arrays.asList( "wait", "projected", "developing").contains(ztStory.getStage())){
|
||||
//如果测试已经开始 那么测试进行中
|
||||
List<ZtTask> testList = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, story)
|
||||
.in(ZtTask::getStatus, Arrays.asList( "doing", "done"))
|
||||
.eq(ZtTask::getType, "test"));
|
||||
if(!CollectionUtils.isEmpty(testList)){
|
||||
//测试任务已经开始
|
||||
this.testingStory(story);
|
||||
}else{
|
||||
.eq(ZtTask::getType, type.getCode()));
|
||||
if(!CollectionUtils.isEmpty(develList)){
|
||||
this.startStory(story);
|
||||
}
|
||||
}
|
||||
|
||||
//如果开发中任务没有了
|
||||
if(CollectionUtils.isEmpty(taskList)){
|
||||
|
||||
}else{
|
||||
List<ZtTask> testList = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, story)
|
||||
.in(ZtTask::getStatus, Arrays.asList( "wait", "doing", "pause","done"))
|
||||
.eq(ZtTask::getType, "test"));
|
||||
//如果测试中有任务
|
||||
Long waitCount = testList.stream().filter(o -> Arrays.asList("wait").contains(o.getStatus())).count();
|
||||
.in(ZtTask::getStatus, Arrays.asList( "wait", "doing", "pause"))
|
||||
.eq(ZtTask::getType, TaskType.test.getCode()));
|
||||
if(!CollectionUtils.isEmpty(testList)){
|
||||
testingStory(story);
|
||||
}else{
|
||||
List<ZtTask> doneList = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, story)
|
||||
.in(ZtTask::getStatus, Arrays.asList( "done")));
|
||||
if(CollectionUtils.isEmpty(doneList)){
|
||||
this.waitStory(story);
|
||||
return;
|
||||
}
|
||||
|
||||
if(!CollectionUtils.isEmpty(testList)&&waitCount.intValue()!=testList.size()){
|
||||
Long doneCount = testList.stream().filter(o -> Arrays.asList("done").contains(o.getStatus())).count();
|
||||
if(doneCount.intValue()==testList.size()){
|
||||
|
||||
List<ZtTask> testedList = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, story)
|
||||
.in(ZtTask::getStatus, Arrays.asList( "done"))
|
||||
.eq(ZtTask::getType, TaskType.test.getCode()));
|
||||
if(!CollectionUtils.isEmpty(testedList)){
|
||||
testedStory(story,finishBy);
|
||||
}else{
|
||||
this.testingStory(story);
|
||||
}
|
||||
}else{
|
||||
//如果开发任务没有了 并且测试还没开始
|
||||
this.finishStory(story,finishBy);
|
||||
}
|
||||
}
|
||||
|
||||
// 如果有多个开发任务:
|
||||
// 1、其中有一个开发进行中,并且所有测试任务未开始,则【开发进行中】
|
||||
// 2、所有开发任务已完成,并且所有测试任务未开始,则【开发完成】
|
||||
// 如果有多个测试任务:
|
||||
// 1、其中有一个测试进行中,则【测试进行中】
|
||||
// 2、所有测试任务已完成,但还有一些开发任务没有结束,则【测试进行中】
|
||||
// 3、所有测试任务已完成,并且所有开发任务已完成,则【测试完成】
|
||||
// ZtStory ztStory = this.baseMapper.selectById(story);
|
||||
// wait 初始化 projected 已立项 developing 研发中 developed 研发完毕 testing 测试中 tested
|
||||
// if(Arrays.asList("wait","projected","developing","developed").contains(ztStory.getStage())){
|
||||
// }else if(Arrays.asList("testing").contains(ztStory.getStage())){
|
||||
// this.testedStory(story,finishBy);
|
||||
}
|
||||
return;
|
||||
}
|
||||
//测试任务取消
|
||||
if(cancelFlag&&type==TaskType.test){
|
||||
List<ZtTask> develing = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, story)
|
||||
.in(ZtTask::getStatus, Arrays.asList( "wait", "doing", "pause"))
|
||||
.eq(ZtTask::getType, TaskType.devel.getCode()));
|
||||
if(!CollectionUtils.isEmpty(develing)){
|
||||
startStory(story);
|
||||
return;
|
||||
}
|
||||
|
||||
List<ZtTask> testling = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, story)
|
||||
.in(ZtTask::getStatus, Arrays.asList( "wait", "doing", "pause"))
|
||||
.eq(ZtTask::getType, TaskType.test.getCode()));
|
||||
if(!CollectionUtils.isEmpty(testling)){
|
||||
testingStory(story);
|
||||
return;
|
||||
}
|
||||
List<ZtTask> doneList = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, story)
|
||||
.in(ZtTask::getStatus, Arrays.asList( "done")));
|
||||
if(CollectionUtils.isEmpty(doneList)){
|
||||
this.waitStory(story);
|
||||
return;
|
||||
}
|
||||
List<ZtTask> testedList = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, story)
|
||||
.eq(ZtTask::getType,TaskType.test.getCode())
|
||||
.in(ZtTask::getStatus, Arrays.asList( "done")));
|
||||
if(!CollectionUtils.isEmpty(testedList)){
|
||||
this.testedStory(story,finishBy);
|
||||
return;
|
||||
}
|
||||
List<ZtTask> develedList = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, story)
|
||||
.eq(ZtTask::getType,TaskType.devel.getCode())
|
||||
.in(ZtTask::getStatus, Arrays.asList( "done")));
|
||||
if(!CollectionUtils.isEmpty(develedList)){
|
||||
this.finishStory(story,finishBy);
|
||||
return;
|
||||
}
|
||||
return;
|
||||
|
||||
}
|
||||
// if(cancelFlag&&type==TaskType.test){
|
||||
// List<ZtTask> develList = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, story)
|
||||
// .in(ZtTask::getStatus, Arrays.asList( "wait", "doing", "pause"))
|
||||
// .eq(ZtTask::getType, type.getCode()));
|
||||
// if(!CollectionUtils.isEmpty(develList)){
|
||||
// this.startStory(story);
|
||||
// }else{
|
||||
// List<ZtTask> testList = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, story)
|
||||
// .in(ZtTask::getStatus, Arrays.asList( "wait", "doing", "pause"))
|
||||
// .eq(ZtTask::getType, TaskType.test.getCode()));
|
||||
// if(!CollectionUtils.isEmpty(testList)){
|
||||
// testingStory(story);
|
||||
// }else{
|
||||
// List<ZtTask> testedList = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, story)
|
||||
// .in(ZtTask::getStatus, Arrays.asList( "done"))
|
||||
// .eq(ZtTask::getType, TaskType.test.getCode()));
|
||||
// if(!CollectionUtils.isEmpty(testedList)){
|
||||
// testedStory(story,finishBy);
|
||||
// }else{
|
||||
// this.finishStory(story,finishBy);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// }
|
||||
// return;
|
||||
// }
|
||||
|
||||
if(type==TaskType.test){
|
||||
// 测试
|
||||
List<ZtTask> testList = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, story)
|
||||
.in(ZtTask::getStatus, Arrays.asList( "wait", "doing", "pause"))
|
||||
.eq(ZtTask::getType, type.getCode()));
|
||||
List<ZtTask> develList = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, story)
|
||||
.in(ZtTask::getStatus, Arrays.asList( "wait", "doing", "pause"))
|
||||
.eq(ZtTask::getType, TaskType.devel.getCode()));
|
||||
|
||||
// //开发完成
|
||||
// void finishStory(Integer story,String finishBy);
|
||||
// //测试完毕
|
||||
// void testedStory(Integer story,String finishBy);
|
||||
// //测试中
|
||||
// void testingStory(Integer story);
|
||||
// //发布
|
||||
// void releaseStory(Integer story);
|
||||
|
||||
|
||||
|
||||
if(CollectionUtils.isEmpty(develList)&&CollectionUtils.isEmpty(testList)){
|
||||
long done = taskService.count(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, story)
|
||||
.eq(ZtTask::getType,type.getCode())
|
||||
.in(ZtTask::getStatus, Arrays.asList("done")));
|
||||
if(done<1){
|
||||
return;
|
||||
}
|
||||
this.testedStory(story,finishBy);
|
||||
}else{
|
||||
if(CollectionUtils.isEmpty(develList)){
|
||||
this.testingStory(story);
|
||||
}else if(!CollectionUtils.isEmpty(develList)){
|
||||
this.startStory(story);
|
||||
}else if(!CollectionUtils.isEmpty(testList)){
|
||||
this.testingStory(story);
|
||||
}
|
||||
}
|
||||
|
||||
}else if(type==TaskType.devel){
|
||||
// 开发
|
||||
List<ZtTask> taskList = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, story)
|
||||
.in(ZtTask::getStatus, Arrays.asList( "wait", "doing", "pause"))
|
||||
.eq(ZtTask::getType, type.getCode()));
|
||||
if(!CollectionUtils.isEmpty(taskList)){
|
||||
this.startStory(story);
|
||||
}else{
|
||||
long done = taskService.count(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, story)
|
||||
.in(ZtTask::getStatus, Arrays.asList("done")));
|
||||
if(done<1){
|
||||
|
||||
}else{
|
||||
this.finishStory(story,finishBy);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// @Override
|
||||
// public void taskFinishChangeStatus(Integer story, String finishBy,TaskType type) {
|
||||
// if(story==null||story==0){
|
||||
// return;
|
||||
// }
|
||||
// ZtStory ztStory = this.baseMapper.selectById(story);
|
||||
//
|
||||
// List<ZtTask> taskList = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, story)
|
||||
// .in(ZtTask::getStatus, Arrays.asList( "wait", "doing", "pause"))
|
||||
// .eq(ZtTask::getType, "devel"));
|
||||
// //如果开发有任务 并且状态需要变为开发中
|
||||
// if(!CollectionUtils.isEmpty(taskList)&&Arrays.asList( "wait", "projected", "developing").contains(ztStory.getStage())){
|
||||
// //如果测试已经开始 那么测试进行中
|
||||
// List<ZtTask> testList = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, story)
|
||||
// .in(ZtTask::getStatus, Arrays.asList( "doing", "done"))
|
||||
// .eq(ZtTask::getType, "test"));
|
||||
// if(!CollectionUtils.isEmpty(testList)){
|
||||
// //测试任务已经开始
|
||||
// this.testingStory(story);
|
||||
// }else{
|
||||
// this.startStory(story);
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// //如果开发中任务没有了
|
||||
// if(CollectionUtils.isEmpty(taskList)){
|
||||
//
|
||||
// List<ZtTask> testList = taskService.list(new QueryWrapper<ZtTask>().lambda().eq(ZtTask::getStory, story)
|
||||
// .in(ZtTask::getStatus, Arrays.asList( "wait", "doing", "pause","done"))
|
||||
// .eq(ZtTask::getType, "test"));
|
||||
// //如果测试中有任务
|
||||
// Long waitCount = testList.stream().filter(o -> Arrays.asList("wait").contains(o.getStatus())).count();
|
||||
//
|
||||
// if(!CollectionUtils.isEmpty(testList)&&waitCount.intValue()!=testList.size()){
|
||||
// Long doneCount = testList.stream().filter(o -> Arrays.asList("done").contains(o.getStatus())).count();
|
||||
// if(doneCount.intValue()==testList.size()){
|
||||
// testedStory(story,finishBy);
|
||||
// }else{
|
||||
// this.testingStory(story);
|
||||
// }
|
||||
// }else{
|
||||
// //如果开发任务没有了 并且测试还没开始
|
||||
// this.finishStory(story,finishBy);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
@Override
|
||||
@ -1288,9 +1469,6 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
if (ztStory.getFeedback() != null && ztStory.getFeedback() != 0) {
|
||||
this.storyFeedbackService.feedbackStart(ztStory.getFeedback());
|
||||
}
|
||||
if (!Arrays.asList("wait", "projected", "developing", "developed").contains(ztStory.getStage())) {
|
||||
return;
|
||||
}
|
||||
if ("closed".equals(ztStory.getStatus())) {
|
||||
throw new BusinessException("当前已关闭");
|
||||
}
|
||||
@ -1667,7 +1845,10 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
}
|
||||
|
||||
this.closeTaskBug(ztStory.getId());
|
||||
|
||||
if(ztStory.getUserStory()!=null&&ztStory.getUserStory()!=0){
|
||||
storyUserService.storyFinishedChangeStatus(ztStory.getUserStory(),UserStoryEnums.YWC);
|
||||
// storyUserService.storyFinishedChangeStatus(ztStory.getUserStory(),UserStoryEnums.CFM);
|
||||
}
|
||||
}
|
||||
|
||||
//指派
|
||||
@ -1773,17 +1954,18 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
if (revieweResult == 1) {
|
||||
status = ActionStatus.YSTG;
|
||||
//如果研发需求验收完毕 那么用户需求也需要变更
|
||||
if (ztStory.getUserStory() != null && ztStory.getUserStory() != 0) {
|
||||
List<ZtStory> storyList = this.baseMapper.selectList(new QueryWrapper<ZtStory>().lambda()
|
||||
.ne(ZtStory::getId, ztStory.getId())
|
||||
.in(ZtStory::getStage, "wait", "projected", "developing", "developed", "testing", "tested", "released")
|
||||
.eq(ZtStory::getUserStory, ztStory.getUserStory()));
|
||||
if (CollectionUtils.isEmpty(storyList)) {
|
||||
ZtStoryUser ztStoryUser = this.storyUserService.getById(ztStory.getUserStory());
|
||||
ztStoryUser.setStatus("finished");
|
||||
this.storyUserService.updateById(ztStoryUser);
|
||||
}
|
||||
}
|
||||
// if (ztStory.getUserStory() != null && ztStory.getUserStory() != 0) {
|
||||
// List<ZtStory> storyList = this.baseMapper.selectList(new QueryWrapper<ZtStory>().lambda()
|
||||
// .ne(ZtStory::getId, ztStory.getId())
|
||||
// .in(ZtStory::getStage, "wait", "projected", "developing", "developed", "testing", "tested", "released")
|
||||
// .eq(ZtStory::getUserStory, ztStory.getUserStory()));
|
||||
// if (CollectionUtils.isEmpty(storyList)) {
|
||||
// ZtStoryUser ztStoryUser = this.storyUserService.getById(ztStory.getUserStory());
|
||||
//
|
||||
// ztStoryUser.setStatus(UserStoryEnums.YWC.getCode());
|
||||
// this.storyUserService.updateById(ztStoryUser);
|
||||
// }
|
||||
// }
|
||||
ztStory.setStatus("finished");
|
||||
} else {
|
||||
status = ActionStatus.YSBTG;
|
||||
@ -1794,9 +1976,10 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
if (revieweResult == 1 && ztStory.getFeedback() != null && ztStory.getFeedback() != 0) {
|
||||
this.storyFeedbackService.ysFeedback(ztStory.getFeedback());
|
||||
}
|
||||
if(ztStory.getStatus().equals("finished")){
|
||||
storyUserService.storyFinishedChangeStatus(ztStory.getUserStory(),UserStoryEnums.YWC);
|
||||
|
||||
|
||||
|
||||
}
|
||||
//添加action
|
||||
actionService.addAction(ActionType.XQ, status, ztStory.getId(), ztStory.getProduct() + "", null, null,
|
||||
RiskUserThreadLocal.get().getName(), dto.getDesc(), ztStory.getAssignedTo());
|
||||
@ -2184,5 +2367,4 @@ public class ZtStoryServiceImpl extends ServiceImpl<ZtStoryMapper, ZtStory> impl
|
||||
return oldPStatus;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
@ -86,7 +86,7 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
|
||||
s.setStage("wait");
|
||||
this.baseMapper.insert(s);
|
||||
|
||||
fileService.updateFile(dto.getFiles(),s.getId(), FileTypes.userStoryTask);
|
||||
fileService.updateFile(dto.getFiles(),s.getId(), FileTypes.userStory);
|
||||
|
||||
actionService.addAction(ActionType.USERXQ, ActionStatus.XJ, s.getId(), dto.getProduct()+"", null, null,
|
||||
RiskUserThreadLocal.get().getName(), "", "");
|
||||
@ -127,10 +127,10 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
|
||||
String status = ztStory.getStatus();
|
||||
|
||||
|
||||
BeanUtils.copyProperties(dto, ztStory);
|
||||
BeanUtils.copyProperties(dto, ztStory,"status");
|
||||
ztStory.setLasteditedby(RiskUserThreadLocal.get().getName());
|
||||
ztStory.setLastediteddate(new Date());
|
||||
if(!"active".equals(storyStatus)){
|
||||
if(Arrays.asList("reviewing","draft").contains(storyStatus)){
|
||||
if("draft".equals(dto.getStatus())){
|
||||
ztStory.setStatus("draft");
|
||||
}else{
|
||||
@ -138,13 +138,11 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
|
||||
ztStory.setStatus("reviewing");
|
||||
}
|
||||
}
|
||||
}else{
|
||||
ztStory.setStatus("active");
|
||||
}
|
||||
|
||||
this.baseMapper.updateById(ztStory);
|
||||
|
||||
fileService.updateFile(dto.getFiles(),ztStory.getId(), FileTypes.userStoryTask);
|
||||
fileService.updateFile(dto.getFiles(),ztStory.getId(), FileTypes.userStory);
|
||||
|
||||
actionService.addAction(ActionType.USERXQ, ActionStatus.BJ, dto.getId(), dto.getProduct() + "", dto.getProject(), null,
|
||||
RiskUserThreadLocal.get().getName(), dto.getRemark(), "");
|
||||
@ -357,6 +355,10 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
|
||||
if(ztUser!=null){
|
||||
dto.setOpenedbyName(ztUser.getNickname());
|
||||
}
|
||||
ztUser = userMap.get(dto.getClosedby());
|
||||
if(ztUser!=null){
|
||||
dto.setClosedbyName(ztUser.getNickname());
|
||||
}
|
||||
Map<Integer, List<ZtStory>> storyUserMap = getStoryUserMap(Arrays.asList(dto));
|
||||
List<ZtStory> ztStories = storyUserMap.get(d.getId());
|
||||
if(!CollectionUtils.isEmpty(ztStories)){
|
||||
@ -389,16 +391,21 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
|
||||
}
|
||||
Map<Integer, List<ZtStoryreviewDTO>> rMap = getReviewMap(Arrays.asList(dto));
|
||||
|
||||
if(!StringUtils.isEmpty(d.getReviewedby())){
|
||||
String[] split = d.getReviewedby().split(",");
|
||||
if(!StringUtils.isEmpty(dto.getReviewedby())){
|
||||
String[] split = dto.getReviewedby().split(",");
|
||||
StringBuilder b=new StringBuilder();
|
||||
for (String s:split) {
|
||||
ZtUser u = userMap.get(s);
|
||||
for ( int i =0 ;i<split.length;i++) {
|
||||
ZtUser u = userMap.get(split[i]);
|
||||
if(u!=null){
|
||||
if(i==split.length-1){
|
||||
b.append(u.getNickname());
|
||||
}else{
|
||||
b.append(u.getNickname()+",");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
dto.setReviewedbyName(b.toString());
|
||||
}
|
||||
dto.setViews(rMap.get(d.getId()));
|
||||
@ -455,6 +462,7 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public void closedStory(ZtStoryUserDTO dto) {
|
||||
String closedreason = dto.getClosedreason();
|
||||
ZtStoryUser ztStoryUser = this.baseMapper.selectById(dto.getId());
|
||||
@ -466,7 +474,7 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
|
||||
ztStoryUser.setCloseddate(new Date());
|
||||
ztStoryUser.setStatus("closed");
|
||||
this.baseMapper.updateById(ztStoryUser);
|
||||
|
||||
this.storyUserTaskService.closedAll(dto.getId());
|
||||
actionService.addAction(ActionType.USERXQ, ActionStatus.GB, dto.getId(), ztStoryUser.getProduct() + "", null, null,
|
||||
RiskUserThreadLocal.get().getName(),"关闭原因:"+closedreason+"\r\n 关闭备注: " +dto.getRemark(), "");
|
||||
|
||||
@ -497,6 +505,12 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
|
||||
if(storyUser==null){
|
||||
throw new BusinessException("请检查");
|
||||
}
|
||||
String oldStatus = storyUser.getStatus();
|
||||
storyUser.setOldStatus(oldStatus);
|
||||
UserStoryEnums userStoryEnums = UserStoryEnums.transfer(oldStatus);
|
||||
if(userStoryEnums.getIndex()>status.getIndex()){
|
||||
return;
|
||||
}
|
||||
if(status==UserStoryEnums.UNCFM){
|
||||
List<ZtStoryUserTask> list = storyUserTaskService.list(new QueryWrapper<ZtStoryUserTask>().lambda().eq(ZtStoryUserTask::getUserStoryId, id));
|
||||
if(list.size()>1){
|
||||
@ -506,18 +520,83 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
|
||||
if(UserStoryEnums.CFM==status){
|
||||
//需求已确认
|
||||
}
|
||||
String oldStatus = storyUser.getStatus();
|
||||
|
||||
storyUser.setStatus(status.getCode());
|
||||
storyUser.setLasteditedby(RiskUserThreadLocal.get().getName());
|
||||
storyUser.setLastediteddate(new Date());
|
||||
UserStoryEnums userStoryEnums = UserStoryEnums.transfer(oldStatus);
|
||||
|
||||
this.baseMapper.updateById(storyUser);
|
||||
actionService.addAction(ActionType.USERXQ, ActionStatus.ZTBG, id, storyUser.getProduct() + "", null, null,
|
||||
RiskUserThreadLocal.get().getName(), userStoryEnums==null?"":userStoryEnums.getValue() +" 变更 "+status.getValue(), "");
|
||||
|
||||
}
|
||||
|
||||
public void storyFinishedChangeStatus(Integer id, UserStoryEnums status){
|
||||
if(id==null||id==0){
|
||||
return;
|
||||
}
|
||||
ZtStoryUser storyUser = this.baseMapper.selectById(id);
|
||||
if(storyUser==null){
|
||||
throw new BusinessException("请检查");
|
||||
}
|
||||
if(UserStoryEnums.transfer(storyUser.getStatus()).getIndex()<UserStoryEnums.CFM.getIndex()){
|
||||
throw new BusinessException("用户需求无法关联");
|
||||
}
|
||||
if(storyUser.getStatus().equals(UserStoryEnums.YWC.getCode())||storyUser.getStatus().equals(UserStoryEnums.CLOSED.getCode())){
|
||||
return;
|
||||
}
|
||||
if(status==UserStoryEnums.KFZ){
|
||||
List<ZtStory> activeList = this.storyService.list(new QueryWrapper<ZtStory>().lambda().eq(ZtStory::getUserStory, id)
|
||||
.in(ZtStory::getStatus, "active")
|
||||
);
|
||||
if(CollectionUtils.isEmpty(activeList)||storyUser.getStatus().equals(UserStoryEnums.KFZ.getCode())){
|
||||
return;
|
||||
}
|
||||
|
||||
}else if(status==UserStoryEnums.CFM){
|
||||
// wait 初始化 projected 已立项 developing 研发中 developed 研发完毕 testing 测试中 tested测试完毕 released已发布 verified
|
||||
List<ZtStory> activeList = this.storyService.list(new QueryWrapper<ZtStory>().lambda().eq(ZtStory::getUserStory, id)
|
||||
.eq(ZtStory::getStatus, "active")
|
||||
.in(ZtStory::getStage,"wait","projected","developing","developed","testing","tested","released","verified")
|
||||
);
|
||||
if(!CollectionUtils.isEmpty(activeList)){
|
||||
return;
|
||||
}
|
||||
}else if(status==UserStoryEnums.YWC){
|
||||
// wait 初始化 projected 已立项 developing 研发中 developed 研发完毕 testing 测试中 tested测试完毕 released已发布 verified
|
||||
List<ZtStory> activeList = this.storyService.list(new QueryWrapper<ZtStory>().lambda().eq(ZtStory::getUserStory, id)
|
||||
.eq(ZtStory::getStatus, "active")
|
||||
.in(ZtStory::getStage,"wait","projected","developing","developed","testing","tested","verified","released")
|
||||
);
|
||||
//如果完成先查看相关需求是否以全部完成
|
||||
if(!CollectionUtils.isEmpty(activeList)){
|
||||
return;
|
||||
}else{
|
||||
List<ZtStory> finishList = this.storyService.list(new QueryWrapper<ZtStory>().lambda().eq(ZtStory::getUserStory, id)
|
||||
.eq(ZtStory::getStatus, "finished")
|
||||
);
|
||||
//如果没有进行中 那么查询是否有完成的研发需求
|
||||
if(CollectionUtils.isEmpty(finishList)){
|
||||
return;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
return;
|
||||
}
|
||||
String oldStatus = storyUser.getStatus();
|
||||
storyUser.setOldStatus(oldStatus);
|
||||
UserStoryEnums userStoryEnums = UserStoryEnums.transfer(oldStatus);
|
||||
|
||||
|
||||
storyUser.setStatus(status.getCode());
|
||||
storyUser.setLasteditedby(RiskUserThreadLocal.get().getName());
|
||||
storyUser.setLastediteddate(new Date());
|
||||
|
||||
this.baseMapper.updateById(storyUser);
|
||||
actionService.addAction(ActionType.USERXQ, ActionStatus.ZTBG, id, storyUser.getProduct() + "", null, null,
|
||||
RiskUserThreadLocal.get().getName(), userStoryEnums==null?"":userStoryEnums.getValue() +" 变更 "+status.getValue(), "");
|
||||
}
|
||||
|
||||
//明确需求 需要有交付物
|
||||
@Override
|
||||
@Transactional
|
||||
@ -559,7 +638,7 @@ public class ZtStoryUserServiceImpl extends ServiceImpl<ZtStoryUserMapper, ZtSto
|
||||
//需要会议
|
||||
if(needImprove!=null&&needImprove!=0){
|
||||
if(needImprove==1){
|
||||
this.changeStatus(dto.getId(),UserStoryEnums.DSJ);
|
||||
this.changeStatus(dto.getId(),UserStoryEnums.DGT);
|
||||
}else{
|
||||
this.changeStatus(dto.getId(),UserStoryEnums.CFM);
|
||||
}
|
||||
|
@ -10,16 +10,14 @@ import com.sa.zentao.dao.ZtStoryUserDTO;
|
||||
import com.sa.zentao.dao.ZtStoryUserTaskDTO;
|
||||
import com.sa.zentao.dao.ZtTaskDTO;
|
||||
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.ZtStoryUserTaskMapper;
|
||||
import com.sa.zentao.qo.ZtProjectQo;
|
||||
import com.sa.zentao.service.*;
|
||||
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.sa.zentao.utils.DateUtils;
|
||||
import com.sa.zentao.utils.FloatUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
@ -30,6 +28,8 @@ import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
@ -80,6 +80,8 @@ public class ZtStoryUserTaskServiceImpl extends ServiceImpl<ZtStoryUserTaskMapp
|
||||
|
||||
if(!CollectionUtils.isEmpty(list)){
|
||||
Map<String, ZtUser> userMap = userService.userMapByIds(null);
|
||||
List<ZtStoryUser> storyUsers = this.storyUserService.listByIds(list.stream().map(o -> o.getUserStoryId()).collect(Collectors.toList()));
|
||||
|
||||
for (ZtStoryUserTaskDTO d:list) {
|
||||
ZtUser ztUser = userMap.get(d.getOpenedby());
|
||||
if(ztUser!=null){
|
||||
@ -105,6 +107,13 @@ public class ZtStoryUserTaskServiceImpl extends ServiceImpl<ZtStoryUserTaskMapp
|
||||
if(ztUser!=null){
|
||||
d.setLastEditedByName(ztUser.getNickname());
|
||||
}
|
||||
List<ZtStoryUser> sList = storyUsers.stream().filter(o -> o.getId().intValue() == d.getUserStoryId().intValue()).collect(Collectors.toList());
|
||||
if(!CollectionUtils.isEmpty(sList)){
|
||||
d.setUserStoryName(sList.get(0).getTitle());
|
||||
ZtStoryUserDTO dto=new ZtStoryUserDTO();
|
||||
BeanUtils.copyProperties(sList.get(0),dto);
|
||||
d.setStoryUserInfo(dto);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@ -120,20 +129,32 @@ public class ZtStoryUserTaskServiceImpl extends ServiceImpl<ZtStoryUserTaskMapp
|
||||
if(story==null){
|
||||
throw new BusinessException("未查询到用户需求");
|
||||
}
|
||||
if(dto.getEststarted()==null||dto.getDeadline()==null){
|
||||
throw new BusinessException("日期必选");
|
||||
}
|
||||
String type = dto.getType();
|
||||
|
||||
//wait 未开始 doing 进行中 finished
|
||||
List<ZtStoryUserTask> hisList = this.baseMapper.selectList(new QueryWrapper<ZtStoryUserTask>().lambda().eq(ZtStoryUserTask::getType, type)
|
||||
List<ZtStoryUserTask> hisList = this.baseMapper.selectList(new QueryWrapper<ZtStoryUserTask>().lambda()
|
||||
.eq(ZtStoryUserTask::getUserStoryId, dto.getUserStoryId())
|
||||
.in(ZtStoryUserTask::getStatus,"wait","doing","finished")
|
||||
.in(ZtStoryUserTask::getStatus,"wait","doing")
|
||||
);
|
||||
if(!CollectionUtils.isEmpty(hisList)&&hisList.size()>1){
|
||||
throw new BusinessException("无法添加");
|
||||
if(!CollectionUtils.isEmpty(hisList)&&hisList.size()>0){
|
||||
throw new BusinessException("同时只允许建一个任务");
|
||||
}
|
||||
if(type.equals("design")){
|
||||
if(UserStoryEnums.transfer(story.getStatus()).getIndex()> UserStoryEnums.XXSJZ.getIndex()){
|
||||
throw new BusinessException("当前状态无法添加");
|
||||
}
|
||||
//设计
|
||||
this.storyUserService.changeStatus(dto.getUserStoryId(),UserStoryEnums.XXSJZ);
|
||||
|
||||
}else if(type.equals("improve")){
|
||||
|
||||
if(UserStoryEnums.transfer(story.getStatus()).getIndex()> UserStoryEnums.UNCFM.getIndex()
|
||||
){
|
||||
throw new BusinessException("当前状态无法添加");
|
||||
}
|
||||
//明确
|
||||
this.storyUserService.changeStatus(dto.getUserStoryId(),UserStoryEnums.UNCFM);
|
||||
}
|
||||
@ -143,13 +164,14 @@ public class ZtStoryUserTaskServiceImpl extends ServiceImpl<ZtStoryUserTaskMapp
|
||||
task.setStatus("wait");
|
||||
task.setOpenedby(RiskUserThreadLocal.get().getName());
|
||||
task.setOpeneddate(new Date());
|
||||
task.setLeft(task.getConsumed());
|
||||
task.setLeft(0F);
|
||||
task.setConsumed(0F);
|
||||
|
||||
this.baseMapper.insert(task);
|
||||
//产品确认中
|
||||
|
||||
|
||||
fileService.updateFile(dto.getFiles(),task.getId(), FileTypes.userStory);
|
||||
fileService.updateFile(dto.getFiles(),task.getId(), FileTypes.userStoryTask);
|
||||
actionService.addAction(ActionType.STORYUSERTASK, ActionStatus.XJ, task.getId()
|
||||
, task.getProduct().toString(), null, null,
|
||||
RiskUserThreadLocal.get().getName(),"", null);
|
||||
@ -181,10 +203,14 @@ public class ZtStoryUserTaskServiceImpl extends ServiceImpl<ZtStoryUserTaskMapp
|
||||
ztStoryUserTask.setLastEditedDate(new Date());
|
||||
this.baseMapper.updateById(ztStoryUserTask);
|
||||
fileService.updateFile(dto.getFiles(),ztStoryUserTask.getId(), FileTypes.userStoryTask);
|
||||
|
||||
if(!StringUtils.isEmpty(dto.getDesc())){
|
||||
actionService.addAction(ActionType.STORYUSERTASK, ActionStatus.TJBZ, ztStoryUserTask.getId()
|
||||
, ztStoryUserTask.getProduct().toString(), null, null,
|
||||
RiskUserThreadLocal.get().getName(),dto.getDesc(), null);
|
||||
}
|
||||
actionService.addAction(ActionType.STORYUSERTASK, ActionStatus.BJ, ztStoryUserTask.getId()
|
||||
, ztStoryUserTask.getProduct().toString(), null, null,
|
||||
RiskUserThreadLocal.get().getName(),"", null);
|
||||
RiskUserThreadLocal.get().getName(),null, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -216,6 +242,15 @@ public class ZtStoryUserTaskServiceImpl extends ServiceImpl<ZtStoryUserTaskMapp
|
||||
ztStoryUserTask.setCanceledby(RiskUserThreadLocal.get().getName());
|
||||
ztStoryUserTask.setCanceleddate(new Date());
|
||||
this.baseMapper.updateById(ztStoryUserTask);
|
||||
ZtStoryUser ztStoryUser = this.storyUserService.getById(ztStoryUserTask.getUserStoryId());
|
||||
String oldStatus = ztStoryUser.getOldStatus();
|
||||
String status = ztStoryUser.getStatus();
|
||||
|
||||
ztStoryUser.setStatus(ztStoryUser.getOldStatus());
|
||||
storyUserService.updateById(ztStoryUser);
|
||||
|
||||
actionService.addAction(ActionType.USERXQ, ActionStatus.ZTBG, ztStoryUser.getId(), ztStoryUser.getProduct() + "", null, null,
|
||||
RiskUserThreadLocal.get().getName(),UserStoryEnums.transfer(status).getValue() +" 变更 "+UserStoryEnums.transfer(oldStatus).getValue(), "");
|
||||
|
||||
actionService.addAction(ActionType.STORYUSERTASK, ActionStatus.QX, ztStoryUserTask.getId()
|
||||
, ztStoryUserTask.getProduct().toString(), null, null,
|
||||
@ -226,8 +261,8 @@ public class ZtStoryUserTaskServiceImpl extends ServiceImpl<ZtStoryUserTaskMapp
|
||||
@Transactional
|
||||
public void finishedTask(ZtStoryUserTaskDTO dto) {
|
||||
ZtStoryUserTask ztStoryUserTask = this.baseMapper.selectById(dto.getId());
|
||||
if(ztStoryUserTask==null||ztStoryUserTask.getStatus().equals("closed")||ztStoryUserTask.getStatus().equals("cancel")){
|
||||
throw new BusinessException("当前无法取消");
|
||||
if(ztStoryUserTask==null||Arrays.asList("closed","cancel","finished").contains(ztStoryUserTask.getStatus())){
|
||||
throw new BusinessException("当前无法完成");
|
||||
}
|
||||
ztStoryUserTask.setStatus("finished");
|
||||
// 设计 design 明确improve
|
||||
@ -242,7 +277,6 @@ public class ZtStoryUserTaskServiceImpl extends ServiceImpl<ZtStoryUserTaskMapp
|
||||
}else if ((dto.getNeedMeeting()!=null&&dto.getNeedMeeting()==2)&&(dto.getNeedDesign()!=null&&dto.getNeedDesign()==1)){
|
||||
//用户状态待沟通 需要详细设计
|
||||
this.storyUserService.changeStatus(ztStoryUserTask.getUserStoryId(), UserStoryEnums.DSJ);
|
||||
this.add(dto.getInfo());
|
||||
}
|
||||
}else if("design".equals(ztStoryUserTask.getType())){
|
||||
this.storyUserService.changeStatus(ztStoryUserTask.getUserStoryId(), UserStoryEnums.CPYSJ);
|
||||
@ -251,9 +285,9 @@ public class ZtStoryUserTaskServiceImpl extends ServiceImpl<ZtStoryUserTaskMapp
|
||||
|
||||
|
||||
|
||||
float v = FloatUtils.floatSub(ztStoryUserTask.getEstimate(), FloatUtils.floatSub(ztStoryUserTask.getEstimate(), ztStoryUserTask.getConsumed()));
|
||||
float v = FloatUtils.floatSub(ztStoryUserTask.getEstimate(), dto.getConsumed());
|
||||
ztStoryUserTask.setLeft(v<0?0:v);
|
||||
ztStoryUserTask.setConsumed(FloatUtils.floatAdd(ztStoryUserTask.getConsumed(),dto.getConsumed()));
|
||||
ztStoryUserTask.setConsumed(dto.getConsumed());
|
||||
ztStoryUserTask.setLastEditedBy(RiskUserThreadLocal.get().getName());
|
||||
ztStoryUserTask.setLastEditedDate(new Date());
|
||||
ztStoryUserTask.setFinishedby(RiskUserThreadLocal.get().getName());
|
||||
@ -261,10 +295,18 @@ public class ZtStoryUserTaskServiceImpl extends ServiceImpl<ZtStoryUserTaskMapp
|
||||
|
||||
this.baseMapper.updateById(ztStoryUserTask);
|
||||
|
||||
// if("improve".equals(ztStoryUserTask.getType())){
|
||||
// //需要会议
|
||||
// if ((dto.getNeedMeeting()!=null&&dto.getNeedMeeting()==2)&&(dto.getNeedDesign()!=null&&dto.getNeedDesign()==1)){
|
||||
// //用户状态待沟通 需要详细设计
|
||||
// this.add(dto.getInfo());
|
||||
// }
|
||||
// }
|
||||
|
||||
ZtEffort e=new ZtEffort();
|
||||
e.setObjectid(ztStoryUserTask.getId());
|
||||
e.setObjecttype("userStoryTask");
|
||||
e.setConsumed(ztStoryUserTask.getConsumed());
|
||||
e.setConsumed(dto.getConsumed());
|
||||
e.setLeft(ztStoryUserTask.getLeft());
|
||||
e.setAccount(RiskUserThreadLocal.get().getName());
|
||||
e.setDate(new Date());
|
||||
@ -273,7 +315,7 @@ public class ZtStoryUserTaskServiceImpl extends ServiceImpl<ZtStoryUserTaskMapp
|
||||
|
||||
actionService.addAction(ActionType.STORYUSERTASK, ActionStatus.WC, ztStoryUserTask.getId()
|
||||
, ztStoryUserTask.getProduct().toString(), null, null,
|
||||
RiskUserThreadLocal.get().getName(),"", null);
|
||||
RiskUserThreadLocal.get().getName(),dto.getDesc(), null);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -325,4 +367,57 @@ public class ZtStoryUserTaskServiceImpl extends ServiceImpl<ZtStoryUserTaskMapp
|
||||
return ztStoryUserTaskDTO;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addRemark(ZtStoryUserTaskDTO dto) {
|
||||
ZtStoryUserTask ztStoryUserTask = this.baseMapper.selectById(dto.getId());
|
||||
if(ztStoryUserTask==null){
|
||||
throw new BusinessException("未查询到");
|
||||
}
|
||||
actionService.addAction(ActionType.STORYUSERTASK, ActionStatus.TJBZ, dto.getId(), ztStoryUserTask.getProduct() + "", null, null,
|
||||
RiskUserThreadLocal.get().getName(), dto.getRemark(), "");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void assignedTo(ZtStoryUserTaskDTO dto) {
|
||||
ZtStoryUserTask ztStoryUserTask = this.baseMapper.selectById(dto.getId());
|
||||
if (ztStoryUserTask == null) {
|
||||
throw new BusinessException("未查询到数据");
|
||||
}
|
||||
ztStoryUserTask.setAssignedTo(dto.getAssignedTo());
|
||||
ztStoryUserTask.setLastEditedBy(RiskUserThreadLocal.get().getName());
|
||||
ztStoryUserTask.setLastEditedDate(new Date());
|
||||
this.baseMapper.updateById(ztStoryUserTask);
|
||||
|
||||
|
||||
|
||||
|
||||
actionService.addAction(ActionType.STORYUSERTASK, ActionStatus.FP, ztStoryUserTask.getId()
|
||||
, ztStoryUserTask.getProduct().toString(),null, null,
|
||||
RiskUserThreadLocal.get().getName(), null, dto.getAssignedTo());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void closedAll(Integer id) {
|
||||
List<ZtStoryUserTask> tasks = this.baseMapper.selectList(new QueryWrapper<ZtStoryUserTask>().lambda()
|
||||
.eq(ZtStoryUserTask::getUserStoryId, id));
|
||||
if(!CollectionUtils.isEmpty(tasks)){
|
||||
for (ZtStoryUserTask t:tasks) {
|
||||
//wait 未开始 doing 进行中 finished 完成 cancel取消 closed
|
||||
if(Arrays.asList("wait","doing").contains(t.getStatus())){
|
||||
t.setStatus("cancel");
|
||||
t.setLastEditedDate(new Date());
|
||||
t.setLastEditedBy(RiskUserThreadLocal.get().getName());
|
||||
t.setCanceledby(RiskUserThreadLocal.get().getName());
|
||||
t.setCanceleddate(new Date());
|
||||
t.setClosedRemark("需求关闭");
|
||||
this.updateById(t);
|
||||
|
||||
actionService.addAction(ActionType.STORYUSERTASK, ActionStatus.GB, t.getId()
|
||||
, t.getProduct().toString(), null, null,
|
||||
RiskUserThreadLocal.get().getName(),"", null);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -18,6 +18,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
||||
import com.sa.zentao.utils.BeanCopyUtil;
|
||||
import com.sa.zentao.utils.DateUtils;
|
||||
import com.sa.zentao.utils.KanBanConstant;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
@ -149,29 +150,6 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
ztTaskDTO.setApprovalRemark(dto.getApprovalRemark());
|
||||
BeanUtils.copyProperties(t,ztTaskDTO);
|
||||
this.approval(ztTaskDTO);
|
||||
//
|
||||
// if (dto.getApprovalStatus() == 1) {
|
||||
// t.setStatus("wait");
|
||||
// } else {
|
||||
// t.setStatus("closed");
|
||||
// }
|
||||
//
|
||||
// t.setApprovalRemark(dto.getApprovalRemark());
|
||||
// t.setLastediteddate(new Date());
|
||||
// t.setLasteditedby(RiskUserThreadLocal.get().getName());
|
||||
// this.baseMapper.updateById(t);
|
||||
//
|
||||
//
|
||||
// ZtProjectproduct projectproduct = projectproductService.getOne(new QueryWrapper<ZtProjectproduct>().lambda().eq(ZtProjectproduct::getProject, t.getProject()));
|
||||
//
|
||||
//
|
||||
// if (dto.getApprovalStatus() == 1) {
|
||||
// actionService.addAction(ActionType.RW, ActionStatus.PSTG, t.getId(), projectproduct == null ? null : projectproduct.getProduct().toString(), projectproduct == null ? null : projectproduct.getProject(), t.getExecution(),
|
||||
// RiskUserThreadLocal.get().getName(), dto.getApprovalRemark(), null);
|
||||
// } else if (dto.getApprovalStatus() == 2) {
|
||||
// actionService.addAction(ActionType.RW, ActionStatus.PSBTG, t.getId(), projectproduct == null ? null : projectproduct.getProduct().toString(), projectproduct == null ? null : projectproduct.getProject(), t.getExecution(),
|
||||
// RiskUserThreadLocal.get().getName(), dto.getApprovalRemark(), null);
|
||||
// }
|
||||
}
|
||||
}
|
||||
|
||||
@ -427,7 +405,6 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
ztTask.setOpeneddate(new Date());
|
||||
ztTask.setEstimate(dto.getLeft());
|
||||
|
||||
|
||||
//getExecution()执行
|
||||
//项目
|
||||
Integer story = ztTask.getStory();
|
||||
@ -472,6 +449,7 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
} else {
|
||||
ztTask.setStatus("wait");
|
||||
ztTask.setReviewingUser(null);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@ -497,6 +475,9 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
}
|
||||
|
||||
this.baseMapper.insert(ztTask);
|
||||
if("wait".equals(ztTask.getStatus())){
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.transferType(ztTask.getType()),false);
|
||||
}
|
||||
|
||||
fileService.updateFile(dto.getFiles(), ztTask.getId(), FileTypes.task);
|
||||
if (ztTask.getExecution() != null && ztTask.getExecution() != 0) {
|
||||
@ -530,6 +511,10 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
if (ztTask == null) {
|
||||
throw new BusinessException("未查询到数据");
|
||||
}
|
||||
Integer s1 = ztTask.getStory();
|
||||
Integer s2 = dto.getStory();
|
||||
|
||||
|
||||
//cancel取消 closed 关闭 done
|
||||
if(Arrays.asList("cancel","closed","done").contains(ztTask.getStatus())){
|
||||
throw new BusinessException("当前无法编辑");
|
||||
@ -589,6 +574,16 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
}
|
||||
|
||||
this.baseMapper.updateById(ztTask);
|
||||
if(ObjectUtils.notEqual(s1,s2)){
|
||||
if(s1!=null&&s1.intValue()!=0){
|
||||
this.storyService.taskFinishChangeStatus(s1,null,TaskType.transferType(ztTask.getType()),true);
|
||||
}
|
||||
if(s2!=null&&s2.intValue()!=0){
|
||||
this.storyService.taskFinishChangeStatus(s2,null,TaskType.transferType(ztTask.getType()),false);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
fileService.updateFile(dto.getFiles(), ztTask.getId(), FileTypes.task);
|
||||
|
||||
@ -704,24 +699,24 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
kanbanlaneService.changeStatus(qo);
|
||||
}
|
||||
}
|
||||
if ("devel".equals(ztTask.getType())) {
|
||||
// if ("devel".equals(ztTask.getType())) {
|
||||
//处理需求
|
||||
|
||||
if ("done".equals(ztTask.getStatus())) {
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(),null);
|
||||
} else if ("doing".equals(ztTask.getStatus())) {
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(),null);
|
||||
}
|
||||
}
|
||||
if ("test".equals(ztTask.getType())) {
|
||||
//处理需求
|
||||
if ("done".equals(ztTask.getStatus())) {
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(),null);
|
||||
} else if ("doing".equals(ztTask.getStatus())) {
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(),null);
|
||||
}
|
||||
|
||||
}
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.transferType(ztTask.getType()),false);
|
||||
// if ("done".equals(ztTask.getStatus())) {
|
||||
// this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.devel,false);
|
||||
// } else if ("doing".equals(ztTask.getStatus())) {
|
||||
// this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.devel,false);
|
||||
// }
|
||||
// }
|
||||
// if ("test".equals(ztTask.getType())) {
|
||||
// //处理需求
|
||||
// if ("done".equals(ztTask.getStatus())) {
|
||||
// this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.test);
|
||||
// } else if ("doing".equals(ztTask.getStatus())) {
|
||||
// this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.test);
|
||||
// }
|
||||
//
|
||||
// }
|
||||
|
||||
|
||||
Integer execution = ztTask.getExecution();
|
||||
@ -733,13 +728,13 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
if (dto.getFinishedFlag() == 1) {
|
||||
String type = ztTask.getType();
|
||||
if (ztTask.getStory() != null && ztTask.getStory() != 0) {
|
||||
if ("test".equals(type)) {
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(),null);
|
||||
} else if ("devel".equals(type)) {
|
||||
//开发
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(),null);
|
||||
}
|
||||
|
||||
// if ("test".equals(type)) {
|
||||
// this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.test);
|
||||
// } else if ("devel".equals(type)) {
|
||||
// //开发
|
||||
// this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.test);
|
||||
// }
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.transferType(type),false);
|
||||
}
|
||||
}
|
||||
|
||||
@ -816,12 +811,13 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
// devel 开发 request 需求 test
|
||||
String type = ztTask.getType();
|
||||
if (ztTask.getStory() != null && ztTask.getStory() != 0) {
|
||||
if ("test".equals(type)) {
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(),finishBy);
|
||||
} else if ("devel".equals(type)) {
|
||||
//开发
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(),finishBy);
|
||||
}
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(),finishBy,TaskType.transferType(type),false);
|
||||
// if ("test".equals(type)) {
|
||||
// this.storyService.taskFinishChangeStatus(ztTask.getStory(),finishBy,TaskType.test);
|
||||
// } else if ("devel".equals(type)) {
|
||||
// //开发
|
||||
// this.storyService.taskFinishChangeStatus(ztTask.getStory(),finishBy,TaskType.devel);
|
||||
// }
|
||||
}
|
||||
if(ztTask.getFeedback()!=null&&ztTask.getFeedback()!=0){
|
||||
this.storyFeedbackService.feedbackFinished(ztTask.getFeedback());
|
||||
@ -860,6 +856,7 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
kanbanlaneService.changeStatus(qo);
|
||||
}
|
||||
}
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.transferType(ztTask.getType()),true);
|
||||
|
||||
|
||||
}
|
||||
@ -904,10 +901,11 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
}
|
||||
}
|
||||
if(ztTask.getStory()!=null&&ztTask.getStory()!=0){
|
||||
this.storyService.finishStory(ztTask.getStory(),null);
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.transferType(ztTask.getType()),true);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -978,6 +976,14 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
|
||||
|
||||
this.saveBatch(saveList);
|
||||
for (ZtTask ztTask:saveList) {
|
||||
if(!ztTask.getStatus().equals("reviewing")){
|
||||
this.storyService.taskFinishChangeStatus(ztTask.getStory(),null,TaskType.transferType(ztTask.getType()),false);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
List<ZtTaskDTO> develList = list.stream().filter(o -> o.getType().equals(TaskType.devel.getCode())).collect(Collectors.toList());
|
||||
|
||||
kanbanlaneService.addTask(list.get(0).getExecution(), saveList);
|
||||
ZtStory story = storyService.getById(list.get(0).getStory());
|
||||
@ -1031,15 +1037,18 @@ public class ZtTaskServiceImpl extends ServiceImpl<ZtTaskMapper, ZtTask> impleme
|
||||
t.setLasteditedby(RiskUserThreadLocal.get().getName());
|
||||
|
||||
ZtProjectproduct projectproduct = projectproductService.getOne(new QueryWrapper<ZtProjectproduct>().lambda().eq(ZtProjectproduct::getProject, t.getProject()));
|
||||
|
||||
this.baseMapper.updateById(t);
|
||||
if (dto.getApprovalStatus() == 1) {
|
||||
this.storyService.taskFinishChangeStatus(t.getStory(),t.getAssignedTo(),TaskType.transferType(t.getType()),false);
|
||||
actionService.addAction(ActionType.RW, ActionStatus.PSTG, t.getId(), projectproduct == null ? null : projectproduct.getProduct().toString(), projectproduct == null ? null : projectproduct.getProject(), t.getExecution(),
|
||||
RiskUserThreadLocal.get().getName(), dto.getApprovalRemark(), null);
|
||||
|
||||
} else {
|
||||
actionService.addAction(ActionType.RW, ActionStatus.PSBTG, t.getId(), projectproduct == null ? null : projectproduct.getProduct().toString(), projectproduct == null ? null : projectproduct.getProject(), t.getExecution(),
|
||||
RiskUserThreadLocal.get().getName(), dto.getApprovalRemark(), null);
|
||||
}
|
||||
this.baseMapper.updateById(t);
|
||||
|
||||
|
||||
if (dto.getApprovalStatus() == 1) {
|
||||
if(t.getFinishedFlag()!=null&&t.getFinishedFlag()==1){
|
||||
dto.setConsumed(t.getEstimate());
|
||||
|
@ -23,7 +23,10 @@ import java.util.Properties;
|
||||
public class SendEmail {
|
||||
|
||||
|
||||
public static void sendMail(String mail, String content) {
|
||||
public static void sendMail(String mail, String content,String title) {
|
||||
if(StringUtils.isEmpty(title)){
|
||||
title="运维提醒";
|
||||
}
|
||||
String host = "smtp.qiye.163.com";
|
||||
String port = "587";
|
||||
String username = "sino-employee@sino-assistance.com";
|
||||
@ -44,7 +47,7 @@ public class SendEmail {
|
||||
MimeMessage message = new MimeMessage(session);
|
||||
message.setFrom(new InternetAddress(username));
|
||||
message.addRecipient(Message.RecipientType.TO, new InternetAddress(mail));
|
||||
message.setSubject("运维提醒", "GBK");
|
||||
message.setSubject(title, "GBK");
|
||||
|
||||
Multipart multipart = new MimeMultipart();
|
||||
|
||||
@ -229,6 +232,6 @@ public class SendEmail {
|
||||
// String str="4468058@qq.com;294438420@qq.com;";
|
||||
// sendMessage(Arrays.asList(str.split(";")),Arrays.asList(""),"22");
|
||||
|
||||
sendMail("4468058@qq.com","123");
|
||||
// sendMail("4468058@qq.com","123");
|
||||
}
|
||||
}
|
@ -85,6 +85,10 @@
|
||||
and severity = #{qo.severity}
|
||||
</if>
|
||||
|
||||
<if test="qo.status != null and qo.status != ''">
|
||||
and status = #{qo.status}
|
||||
</if>
|
||||
|
||||
<if test="qo.pri != null and qo.pri != ''">
|
||||
and pri = #{qo.pri}
|
||||
</if>
|
||||
|
@ -224,11 +224,11 @@
|
||||
</select>
|
||||
<select id="selectPrdByName" resultType="com.sa.zentao.dao.ZtProjectDTO">
|
||||
|
||||
SELECT * from zt_project WHERE `name` = #{name} and type = 'sprint'
|
||||
SELECT p.id,p.project from zt_project p WHERE p.`name` = #{name} and p.type = 'sprint'
|
||||
|
||||
</select>
|
||||
<select id="selectPrdById" resultType="com.sa.zentao.dao.ZtProjectDTO">
|
||||
SELECT * from zt_project WHERE id = #{id} and type = 'sprint'
|
||||
SELECT id,`name` from zt_project WHERE id = #{id} and type = 'sprint'
|
||||
</select>
|
||||
<select id="performanceCount" resultType="com.sa.zentao.dao.PerformanceDTO">
|
||||
SELECT
|
||||
|
@ -109,6 +109,10 @@
|
||||
and s.status = '11'
|
||||
</if>
|
||||
|
||||
<if test="qo.searchVal != null and qo.searchVal == 'WYS' ">
|
||||
and s.ys_user = #{qo.userName}
|
||||
</if>
|
||||
|
||||
<if test="qo.searchVal != null and qo.searchVal == 'WPS' ">
|
||||
and s.reviewedBy like concat('%', #{qo.userName}, '%')
|
||||
</if>
|
||||
@ -234,6 +238,10 @@
|
||||
and s.title like concat('%', #{qo.title}, '%')
|
||||
</if>
|
||||
|
||||
<if test="qo.searchVal != null and qo.searchVal == 'WYS' ">
|
||||
and s.ys_user = #{qo.userName}
|
||||
</if>
|
||||
|
||||
<if test="qo.stage != null and qo.stage != '' ">
|
||||
and s.stage = #{qo.stage}
|
||||
</if>
|
||||
@ -671,7 +679,9 @@
|
||||
and s.status ='reviewing'
|
||||
and v.result = ''
|
||||
</if>
|
||||
|
||||
<if test="qo.searchVal != null and qo.searchVal == 'WYS' ">
|
||||
and s.ys_user = #{qo.userName}
|
||||
</if>
|
||||
<if test="qo.searchVal == 'JH' ">
|
||||
and s.status = 'active'
|
||||
</if>
|
||||
|
@ -55,10 +55,10 @@
|
||||
</if>
|
||||
|
||||
<if test="qo.startDate !=null">
|
||||
and s.openedDate <![CDATA[>=]]> #{qo.startDate}
|
||||
and s.opened_date <![CDATA[>=]]> #{qo.startDate}
|
||||
</if>
|
||||
<if test="qo.endDate !=null">
|
||||
and s.openedDate <![CDATA[<=]]> #{qo.endDate}
|
||||
and s.opened_date <![CDATA[<=]]> #{qo.endDate}
|
||||
</if>
|
||||
|
||||
<if test="qo.searchVal == 'ALL' ">
|
||||
@ -84,6 +84,8 @@
|
||||
</foreach>
|
||||
|
||||
</if>
|
||||
|
||||
order by s.id desc
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
Reference in New Issue
Block a user