Browse Source

添加节点类型、标签等

master
陈裕财 4 years ago
parent
commit
a5cf24dd94
  1. 273
      xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java
  2. 54
      xm-core/src/main/java/com/xm/core/service/XmTaskService.java
  3. 56
      xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskMapper.xml

273
xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java

@ -14,7 +14,6 @@ import com.mdp.qx.HasQx;
import com.mdp.safe.client.entity.User; import com.mdp.safe.client.entity.User;
import com.mdp.safe.client.utils.LoginUtils; import com.mdp.safe.client.utils.LoginUtils;
import com.xm.core.PubTool; import com.xm.core.PubTool;
import com.xm.core.entity.XmProject;
import com.xm.core.entity.XmTask; import com.xm.core.entity.XmTask;
import com.xm.core.service.XmProjectGroupService; import com.xm.core.service.XmProjectGroupService;
import com.xm.core.service.XmProjectService; import com.xm.core.service.XmProjectService;
@ -321,6 +320,13 @@ public class XmTaskController {
m.put("tips", tips); m.put("tips", tips);
return m; return m;
} }
if(!StringUtils.hasText(xmTaskVo.getProjectId())){
return ResponseHelper.failed("projectId-0","项目编号不能为空");
}
if(!StringUtils.hasText(xmTaskVo.getProjectPhaseId())){
return ResponseHelper.failed("ProjectPhaseId-0","项目计划编号不能为空");
}
User user=LoginUtils.getCurrentUserInfo(); User user=LoginUtils.getCurrentUserInfo();
xmTaskVo.setCreateUserid(user.getUserid()); xmTaskVo.setCreateUserid(user.getUserid());
xmTaskVo.setCreateUsername(user.getUsername()); xmTaskVo.setCreateUsername(user.getUsername());
@ -331,37 +337,25 @@ public class XmTaskController {
xmTaskVo.setCdeptid(user.getDeptid()); xmTaskVo.setCdeptid(user.getDeptid());
List<XmProjectGroupVo> pgroups=groupService.getProjectGroupVoList(xmTaskVo.getProjectId()); List<XmProjectGroupVo> pgroups=groupService.getProjectGroupVoList(xmTaskVo.getProjectId());
if(pgroups==null || pgroups.size()==0){ if(pgroups==null || pgroups.size()==0){
tips.setFailureMsg("该项目还未建立项目团队,请先进行团队成员维护");
m.put("tips", tips);
return m;
return ResponseHelper.failed("group-0","该项目还未建立项目团队,请先进行团队成员维护");
} }
boolean isHead=groupService.checkUserIsOtherUserTeamHeadOrAss(pgroups,user.getUserid(),user.getUserid()); boolean isHead=groupService.checkUserIsOtherUserTeamHeadOrAss(pgroups,user.getUserid(),user.getUserid());
if(!isHead){ if(!isHead){
tips.setFailureMsg("您无权新建任务!项目经理、组长可以新建任务。");
m.put("tips", tips);
return m;
return ResponseHelper.failed("group-0","您无权新建任务!项目经理、组长、组长助理可以新建任务。");
} }
xmTaskVo.setRate(BigDecimal.ZERO); xmTaskVo.setRate(BigDecimal.ZERO);
if( !StringUtils.hasText(xmTaskVo.getMilestone()) ){ if( !StringUtils.hasText(xmTaskVo.getMilestone()) ){
xmTaskVo.setMilestone("0"); xmTaskVo.setMilestone("0");
} }
String projectPhaseId=xmTaskVo.getProjectPhaseId(); String projectPhaseId=xmTaskVo.getProjectPhaseId();
BigDecimal zero=BigDecimal.ZERO;
BigDecimal taskBudgetCost=BigDecimal.ZERO;
BigDecimal taskBudgetInnerUserAt=BigDecimal.ZERO;
BigDecimal taskBudgetOutUserAt=BigDecimal.ZERO;
BigDecimal taskBudgetNouserAt=BigDecimal.ZERO;
if("1".equals(xmTaskVo.getTaskOut())) {
taskBudgetOutUserAt=taskBudgetOutUserAt.add(NumberUtil.getBigDecimal(xmTaskVo.getBudgetCost(),zero));
}else {
taskBudgetInnerUserAt=taskBudgetInnerUserAt.add(NumberUtil.getBigDecimal(xmTaskVo.getBudgetCost(),zero));
}
taskBudgetCost=taskBudgetCost.add(taskBudgetInnerUserAt).add(taskBudgetOutUserAt).add(taskBudgetNouserAt);
Tips judgetTips=xmTaskService.judgetBudget(projectPhaseId, taskBudgetCost,taskBudgetInnerUserAt,taskBudgetOutUserAt,taskBudgetNouserAt,null);
if(judgetTips.isOk()) {
this.xmTaskService.parentIdPathsCalcBeforeSave(xmTaskVo);
if(xmTaskVo.getLvl()<=1){
tips=xmTaskService.judgetPhaseBudget(projectPhaseId, xmTaskVo.getBudgetCost(),null,null,null,null);
}else{
tips=xmTaskService.judgetTaskBudget(xmTaskVo.getParentTaskid(), xmTaskVo.getBudgetCost(),null,null,null,null);
}
if(tips.isOk()) {
xmTaskVo = xmTaskService.addTask(xmTaskVo); xmTaskVo = xmTaskService.addTask(xmTaskVo);
}else {
tips=judgetTips;
} }
m.put("data",xmTaskVo); m.put("data",xmTaskVo);
}catch (BizException e) { }catch (BizException e) {
@ -583,31 +577,25 @@ public class XmTaskController {
Tips tips=new Tips("成功更新一条数据"); Tips tips=new Tips("成功更新一条数据");
try{ try{
User user=LoginUtils.getCurrentUserInfo(); User user=LoginUtils.getCurrentUserInfo();
if(!StringUtils.hasText(xmTaskVo.getProjectId())){
tips.setFailureMsg("项目编号不能为空");
m.put("tips", tips);
return m;
}
if(!StringUtils.hasText(xmTaskVo.getId())){ if(!StringUtils.hasText(xmTaskVo.getId())){
tips.setFailureMsg("任务编号不能为空"); tips.setFailureMsg("任务编号不能为空");
m.put("tips", tips); m.put("tips", tips);
return m; return m;
} }
List<XmProjectGroupVo> pgroups=groupService.getProjectGroupVoList(xmTaskVo.getProjectId());
if(pgroups==null || pgroups.size()==0){
tips.setFailureMsg("该项目还未建立项目团队,请先进行团队成员维护");
m.put("tips", tips);
return m;
}
XmTask xmTaskDb=this.xmTaskService.selectOneObject(xmTaskVo); XmTask xmTaskDb=this.xmTaskService.selectOneObject(xmTaskVo);
if(xmTaskDb==null){ if(xmTaskDb==null){
tips.setFailureMsg("该任务不存在");
return ResponseHelper.failed("data-0","任务已不存在");
}
List<XmProjectGroupVo> pgroups=groupService.getProjectGroupVoList(xmTaskDb.getProjectId());
if(pgroups==null || pgroups.size()==0){
tips.setFailureMsg("该项目还未建立项目团队,请先进行团队成员维护");
m.put("tips", tips); m.put("tips", tips);
return m; return m;
} }
boolean isHead=groupService.checkUserIsOtherUserTeamHeadOrAss(pgroups,xmTaskDb.getCreateUserid(),user.getUserid()); boolean isHead=groupService.checkUserIsOtherUserTeamHeadOrAss(pgroups,xmTaskDb.getCreateUserid(),user.getUserid());
if(!isHead){ if(!isHead){
tips.setFailureMsg("您无权修改该任务基础信息!项目经理、组长可以修改任务的基础信息。");
tips.setFailureMsg("您无权修改该任务基础信息!项目经理、组长、助理可以修改任务的基础信息。");
m.put("tips", tips); m.put("tips", tips);
return m; return m;
} }
@ -617,29 +605,28 @@ public class XmTaskController {
XmTask xmTaskParentDb=this.xmTaskService.selectOneObject(new XmTask(xmTaskDb.getParentTaskid())); XmTask xmTaskParentDb=this.xmTaskService.selectOneObject(new XmTask(xmTaskDb.getParentTaskid()));
if(xmTaskParentDb!=null){ if(xmTaskParentDb!=null){
if(!"1".equals(xmTaskParentDb.getNtype())){ if(!"1".equals(xmTaskParentDb.getNtype())){
ResponseHelper.failed("ptask-ntype-0","上级任务"+xmTaskParentDb.getName()+"属于不是任务集,不能下挂任务集");
ResponseHelper.failed("ptask-ntype-0","上级任务"+xmTaskParentDb.getName()+"不是任务集,不能下挂任务集");
} }
} }
} }
} }
} }
BigDecimal taskBudgetCost=BigDecimal.ZERO;
BigDecimal taskBudgetInnerUserAt=BigDecimal.ZERO;
BigDecimal taskBudgetOutUserAt=BigDecimal.ZERO;
BigDecimal taskBudgetNouserAt=BigDecimal.ZERO;
String projectPhaseId=null;
BigDecimal zero=BigDecimal.ZERO;
List<String> excludeTaskIds=new ArrayList<>();
projectPhaseId=xmTaskVo.getProjectPhaseId();
if("1".equals(xmTaskVo.getTaskOut())) {
taskBudgetOutUserAt=taskBudgetOutUserAt.add(NumberUtil.getBigDecimal(xmTaskVo.getBudgetCost(),zero));
}else {
taskBudgetInnerUserAt=taskBudgetInnerUserAt.add(NumberUtil.getBigDecimal(xmTaskVo.getBudgetCost(),zero));
}
taskBudgetCost=taskBudgetCost.add(taskBudgetInnerUserAt).add(taskBudgetOutUserAt).add(taskBudgetNouserAt);
excludeTaskIds.add(xmTaskVo.getId());
Tips judgetTips=xmTaskService.judgetBudget(projectPhaseId, taskBudgetCost,taskBudgetInnerUserAt,taskBudgetOutUserAt,taskBudgetNouserAt,excludeTaskIds);
if(judgetTips.isOk()) {
String projectPhaseId=xmTaskDb.getProjectPhaseId();
this.xmTaskService.parentIdPathsCalcBeforeSave(xmTaskVo);
if(xmTaskVo.getBudgetCost()==null)xmTaskVo.setBudgetCost(BigDecimal.ZERO);
if(xmTaskDb.getBudgetCost()==null)xmTaskDb.setBudgetCost(BigDecimal.ZERO);
List<String> excludeIds=new ArrayList<>();
excludeIds.add(xmTaskDb.getId());
if( xmTaskDb.getBudgetCost().compareTo(xmTaskVo.getBudgetCost())!=0){
if(xmTaskVo.getLvl()<=1){
tips=xmTaskService.judgetPhaseBudget(projectPhaseId, xmTaskVo.getBudgetCost(),null,null,null,excludeIds);
}else{
tips=xmTaskService.judgetTaskBudget(xmTaskDb.getParentTaskid(), xmTaskVo.getBudgetCost(),null,null,null,excludeIds);
}
}
if(tips.isOk()) {
xmTaskService.updateTask(xmTaskVo,xmTaskDb); xmTaskService.updateTask(xmTaskVo,xmTaskDb);
if(!StringUtils.isEmpty(xmTaskVo.getExecutorUserid())) { if(!StringUtils.isEmpty(xmTaskVo.getExecutorUserid())) {
List<XmProjectGroupVo> groups=groupService.getUserGroupsByProjectId(xmTaskVo.getProjectId(), xmTaskVo.getExecutorUserid()); List<XmProjectGroupVo> groups=groupService.getUserGroupsByProjectId(xmTaskVo.getProjectId(), xmTaskVo.getExecutorUserid());
@ -651,8 +638,6 @@ public class XmTaskController {
} }
//改为服务处记录 //改为服务处记录
//xmRecordService.addXmTaskRecord(xmTaskVo.getProjectPhaseId(), xmTaskVo.getId(), "项目-任务-修改任务", "修改任务"+xmTaskVo.getName(),JSON.toJSONString(xmTaskVo),null); //xmRecordService.addXmTaskRecord(xmTaskVo.getProjectPhaseId(), xmTaskVo.getId(), "项目-任务-修改任务", "修改任务"+xmTaskVo.getName(),JSON.toJSONString(xmTaskVo),null);
}else {
tips=judgetTips;
} }
m.put("data",xmTaskVo); m.put("data",xmTaskVo);
}catch (BizException e) { }catch (BizException e) {
@ -676,23 +661,22 @@ public class XmTaskController {
Tips tips=new Tips("成功更新一条数据"); Tips tips=new Tips("成功更新一条数据");
try{ try{
User user=LoginUtils.getCurrentUserInfo(); User user=LoginUtils.getCurrentUserInfo();
if(!StringUtils.hasText(xmTask.getProjectId())){
tips.setFailureMsg("项目编号不能为空");
m.put("tips", tips);
return m;
}
if(!StringUtils.hasText(xmTask.getId())){ if(!StringUtils.hasText(xmTask.getId())){
tips.setFailureMsg("任务编号不能为空"); tips.setFailureMsg("任务编号不能为空");
m.put("tips", tips); m.put("tips", tips);
return m; return m;
} }
List<XmProjectGroupVo> pgroups=groupService.getProjectGroupVoList(xmTask.getProjectId());
XmTask xmTaskDb=xmTaskService.selectOneObject(xmTask);
if(xmTaskDb==null){
return ResponseHelper.failed("data-0","任务已不存在");
}
List<XmProjectGroupVo> pgroups=groupService.getProjectGroupVoList(xmTaskDb.getProjectId());
if(pgroups==null || pgroups.size()==0){ if(pgroups==null || pgroups.size()==0){
tips.setFailureMsg("该项目还未建立项目团队,请先进行团队成员维护"); tips.setFailureMsg("该项目还未建立项目团队,请先进行团队成员维护");
m.put("tips", tips); m.put("tips", tips);
return m; return m;
} }
XmTask xmTaskDb=xmTaskService.selectOneObject(xmTask);
boolean isHead=groupService.checkUserIsOtherUserTeamHeadOrAss(pgroups,xmTaskDb.getCreateUserid(),user.getUserid()); boolean isHead=groupService.checkUserIsOtherUserTeamHeadOrAss(pgroups,xmTaskDb.getCreateUserid(),user.getUserid());
if(!isHead){ if(!isHead){
boolean isCreateUser=user.getUserid().equals(xmTaskDb.getCreateUserid()); boolean isCreateUser=user.getUserid().equals(xmTaskDb.getCreateUserid());
@ -726,23 +710,22 @@ public class XmTaskController {
Tips tips=new Tips("成功更新一条数据"); Tips tips=new Tips("成功更新一条数据");
try{ try{
User user=LoginUtils.getCurrentUserInfo(); User user=LoginUtils.getCurrentUserInfo();
if(!StringUtils.hasText(xmTask.getProjectId())){
tips.setFailureMsg("项目编号不能为空");
m.put("tips", tips);
return m;
}
if(!StringUtils.hasText(xmTask.getId())){ if(!StringUtils.hasText(xmTask.getId())){
tips.setFailureMsg("任务编号不能为空"); tips.setFailureMsg("任务编号不能为空");
m.put("tips", tips); m.put("tips", tips);
return m; return m;
} }
List<XmProjectGroupVo> pgroups=groupService.getProjectGroupVoList(xmTask.getProjectId());
XmTask xmTaskDb=xmTaskService.selectOneObject(xmTask);
if(xmTaskDb==null){
return ResponseHelper.failed("data-0","任务已不存在");
}
List<XmProjectGroupVo> pgroups=groupService.getProjectGroupVoList(xmTaskDb.getProjectId());
if(pgroups==null || pgroups.size()==0){ if(pgroups==null || pgroups.size()==0){
tips.setFailureMsg("该项目还未建立项目团队,请先进行团队成员维护"); tips.setFailureMsg("该项目还未建立项目团队,请先进行团队成员维护");
m.put("tips", tips); m.put("tips", tips);
return m; return m;
} }
XmTask xmTaskDb=xmTaskService.selectOneObject(xmTask);
boolean isHead=groupService.checkUserIsOtherUserTeamHeadOrAss(pgroups,xmTaskDb.getCreateUserid(),user.getUserid()); boolean isHead=groupService.checkUserIsOtherUserTeamHeadOrAss(pgroups,xmTaskDb.getCreateUserid(),user.getUserid());
if(!isHead){ if(!isHead){
boolean isCreateUser=user.getUserid().equals(xmTaskDb.getCreateUserid()); boolean isCreateUser=user.getUserid().equals(xmTaskDb.getCreateUserid());
@ -755,9 +738,10 @@ public class XmTaskController {
} }
xmTaskService.updateProgress(xmTask,xmTaskDb); xmTaskService.updateProgress(xmTask,xmTaskDb);
if(!StringUtils.isEmpty(xmTaskDb.getExecutorUserid())) { if(!StringUtils.isEmpty(xmTaskDb.getExecutorUserid())) {
if(pgroups!=null && pgroups.size()>0) {
for (XmProjectGroupVo g : pgroups) {
xmPushMsgService.pushGroupMsg(user.getBranchId(), g.getId(), user.getUserid(), user.getUsername(), user.getUsername()+"将任务【"+xmTaskDb.getName()+"】进度更新为"+xmTask.getRate()+"%");
List<XmProjectGroupVo> groupVoList=this.groupService.getUserGroups(pgroups,xmTaskDb.getExecutorUserid());
if(groupVoList!=null && groupVoList.size()>0) {
for (XmProjectGroupVo g : groupVoList) {
xmPushMsgService.pushGroupMsg(g.getBranchId(), g.getId(), user.getUserid(), user.getUsername(), user.getUsername()+"将任务【"+xmTaskDb.getName()+"】进度更新为"+xmTask.getRate()+"%");
} }
} }
} }
@ -786,11 +770,7 @@ public class XmTaskController {
try{ try{
User user=LoginUtils.getCurrentUserInfo(); User user=LoginUtils.getCurrentUserInfo();
BigDecimal taskBudgetCost=BigDecimal.ZERO;
BigDecimal taskBudgetInnerUserAt=BigDecimal.ZERO;
BigDecimal taskBudgetOutUserAt=BigDecimal.ZERO;
BigDecimal taskBudgetNouserAt=BigDecimal.ZERO;
if(xmTasks==null || xmTasks.size()==0){
if(xmTasks==null || xmTasks.size()==0){
tips.setFailureMsg("任务列表不能为空"); tips.setFailureMsg("任务列表不能为空");
m.put("tips", tips); m.put("tips", tips);
return m; return m;
@ -821,9 +801,7 @@ public class XmTaskController {
m.put("tips", tips); m.put("tips", tips);
return m; return m;
} }
BigDecimal zero=BigDecimal.ZERO;
List<String> excludeTaskIds=new ArrayList<>();
for (XmTask g : xmTasks) {
for (XmTask g : xmTasks) {
if(!projectPhaseId.equals(g.getProjectPhaseId())){ if(!projectPhaseId.equals(g.getProjectPhaseId())){
tips.setFailureMsg("只能在同一个计划下批量导入任务"); tips.setFailureMsg("只能在同一个计划下批量导入任务");
m.put("tips", tips); m.put("tips", tips);
@ -842,30 +820,52 @@ public class XmTaskController {
g.setExeUserids(null); g.setExeUserids(null);
g.setExeUsernames(null); g.setExeUsernames(null);
g.setCdeptid(user.getDeptid()); g.setCdeptid(user.getDeptid());
if("1".equals(g.getTaskOut())) {
taskBudgetOutUserAt=taskBudgetOutUserAt.add(NumberUtil.getBigDecimal(g.getBudgetCost(),zero));
}else {
taskBudgetInnerUserAt=taskBudgetInnerUserAt.add(NumberUtil.getBigDecimal(g.getBudgetCost(),zero));
if(g.getBudgetCost()==null)g.setBudgetCost(BigDecimal.ZERO);
}
xmTaskService.parentIdPathsCalcBeforeSave(xmTasks);
List<XmTask> tasksLvl1=xmTasks.stream().filter(i->i.getLvl()<=1).collect(Collectors.toList());
if(tasksLvl1.size()>0){
BigDecimal totalTaskBudgetCost=BigDecimal.ZERO;
for (XmTask task : tasksLvl1) {
totalTaskBudgetCost=totalTaskBudgetCost.add(task.getBudgetCost());
} }
excludeTaskIds.add(g.getId());
}
taskBudgetCost=taskBudgetCost.add(taskBudgetInnerUserAt).add(taskBudgetOutUserAt).add(taskBudgetNouserAt);
Tips judgetTips=xmTaskService.judgetBudget(projectPhaseId, taskBudgetCost,taskBudgetInnerUserAt,taskBudgetOutUserAt,taskBudgetNouserAt,excludeTaskIds);
if(judgetTips.isOk()) {
if(totalTaskBudgetCost.compareTo(BigDecimal.ZERO)>0){
tips=xmTaskService.judgetPhaseBudget(projectPhaseId,totalTaskBudgetCost,null,null,null,tasksLvl1.stream().map(i->i.getId()).collect(Collectors.toList()));
if(!tips.isOk()){
tips.setFailureMsg(tips.getMsg()+"相关任务【"+tasksLvl1.stream().map(i->i.getName()).collect(Collectors.joining(","))+"】");
return ResponseHelper.failed(tips);
}
}
}else{
List<XmTask> tasks=xmTasks.stream().filter(i->!xmTasks.stream().filter(k->k.getId().equals(i.getParentTaskid())).findAny().isPresent()).collect(Collectors.toList());
tasks=tasks.stream().filter(i->StringUtils.hasText(i.getParentTaskid())).collect(Collectors.toList());
if(tasks.size()>0){
Set<String> parentTaskIdSet=tasks.stream().map(i->i.getParentTaskid()).collect(Collectors.toSet());
for (String pid : parentTaskIdSet) {
BigDecimal childBudgetCost=BigDecimal.ZERO;
List<XmTask> childs=xmTasks.stream().filter(i->pid.equals(i.getParentTaskid())).collect(Collectors.toList());
for (XmTask child : childs) {
childBudgetCost=childBudgetCost.add(child.getBudgetCost());
}
if(childBudgetCost.compareTo(BigDecimal.ZERO)>0){
tips= xmTaskService.judgetTaskBudget(pid,childBudgetCost,null,null,null,childs.stream().map(i->i.getId()).collect(Collectors.toList()));
if(!tips.isOk()){
return ResponseHelper.failed("budget-not-enought",tips.getMsg()+" 相关任务【"+childs.stream().map(i->i.getName()).collect(Collectors.joining(","))+"】");
}
}
}
}
}
if(tips.isOk()) {
for (XmTask task : xmTasks) { for (XmTask task : xmTasks) {
task.setChildrenCnt( Integer.valueOf(xmTasks.stream().filter(i->task.getId().equals(i.getParentTaskid())).count()+"")); task.setChildrenCnt( Integer.valueOf(xmTasks.stream().filter(i->task.getId().equals(i.getParentTaskid())).count()+""));
} }
xmTaskService.parentIdPathsCalcBeforeSave(xmTasks);
xmTaskService.batchImportFromTemplate(xmTasks); xmTaskService.batchImportFromTemplate(xmTasks);
for (XmTask t : xmTasks) { for (XmTask t : xmTasks) {
xmRecordService.addXmTaskRecord(t.getProjectId(), t.getId(), "项目-任务-批量新增任务", "新增任务"+t.getName(),"",null); xmRecordService.addXmTaskRecord(t.getProjectId(), t.getId(), "项目-任务-批量新增任务", "新增任务"+t.getName(),"",null);
} }
}else {
tips=judgetTips;
} }
}catch (BizException e) { }catch (BizException e) {
@ -1157,48 +1157,61 @@ public class XmTaskController {
} }
} }
BigDecimal taskBudgetCost=BigDecimal.ZERO;
BigDecimal taskBudgetInnerUserAt=BigDecimal.ZERO;
BigDecimal taskBudgetOutUserAt=BigDecimal.ZERO;
BigDecimal taskBudgetNouserAt=BigDecimal.ZERO;
BigDecimal zero=BigDecimal.ZERO;
List<String> excludeTaskIds=new ArrayList<>();
for (XmTask g : xmTasks) {
if(noAllowTasksDbMap.containsKey(g.getId())){
continue;
List<XmTask> canOpTasks=xmTasks.stream().filter(i->!noAllowTasksDbMap.containsKey(i.getId())).collect(Collectors.toList());
this.xmTaskService.parentIdPathsCalcBeforeSave(canOpTasks);
List<XmTask> tasksLvl1=canOpTasks.stream().filter(i->i.getLvl()<=1).collect(Collectors.toList());
if(tasksLvl1.size()>0){
BigDecimal totalTaskBudgetCost=BigDecimal.ZERO;
for (XmTask task : tasksLvl1) {
totalTaskBudgetCost=totalTaskBudgetCost.add(task.getBudgetCost());
} }
if("1".equals(g.getTaskOut())) {
taskBudgetOutUserAt=taskBudgetOutUserAt.add(NumberUtil.getBigDecimal(g.getBudgetCost(),zero));
}else {
taskBudgetInnerUserAt=taskBudgetInnerUserAt.add(NumberUtil.getBigDecimal(g.getBudgetCost(),zero));
}
excludeTaskIds.add(g.getId());
}
taskBudgetCost=taskBudgetCost.add(taskBudgetInnerUserAt).add(taskBudgetOutUserAt).add(taskBudgetNouserAt);
Tips judgetTips=xmTaskService.judgetBudget(projectPhaseId, taskBudgetCost,taskBudgetInnerUserAt,taskBudgetOutUserAt,taskBudgetNouserAt,excludeTaskIds);
if(judgetTips.isOk()) {
//过滤掉我没有权限的
List<XmTask> canUpdateTasks=new ArrayList<>();
List<XmTask> canInsertTasks=new ArrayList<>();
for (XmTask task : updateTasks) {
if(allowTasksDbMap.containsKey(task.getId())){
canUpdateTasks.add(task);
if(totalTaskBudgetCost.compareTo(BigDecimal.ZERO)>0){
tips=xmTaskService.judgetPhaseBudget(projectPhaseId,totalTaskBudgetCost,null,null,null,tasksLvl1.stream().map(i->i.getId()).collect(Collectors.toList()));
if(!tips.isOk()){
tips.setFailureMsg(tips.getMsg()+"相关任务【"+tasksLvl1.stream().map(i->i.getName()).collect(Collectors.joining(","))+"】");
return ResponseHelper.failed(tips);
} }
} }
xmTaskService.batchInsertOrUpdate(insertTasks,canUpdateTasks);
for (XmTask t : canUpdateTasks) {
xmRecordService.addXmTaskRecord(t.getProjectId(), t.getId(), "项目-任务-批量修改任务预算", "修改任务预算"+t.getName(),JSON.toJSONString(t),null);
}else{
List<XmTask> tasks=canOpTasks.stream().filter(i->!canOpTasks.stream().filter(k->k.getId().equals(i.getParentTaskid())).findAny().isPresent()).collect(Collectors.toList());
tasks=tasks.stream().filter(i->StringUtils.hasText(i.getParentTaskid())).collect(Collectors.toList());
if(tasks.size()>0){
Set<String> parentTaskIdSet=tasks.stream().map(i->i.getParentTaskid()).collect(Collectors.toSet());
for (String pid : parentTaskIdSet) {
BigDecimal childBudgetCost=BigDecimal.ZERO;
List<XmTask> childs=canOpTasks.stream().filter(i->pid.equals(i.getParentTaskid())).collect(Collectors.toList());
for (XmTask child : childs) {
childBudgetCost=childBudgetCost.add(child.getBudgetCost());
}
if(childBudgetCost.compareTo(BigDecimal.ZERO)>0){
tips= xmTaskService.judgetTaskBudget(pid,childBudgetCost,null,null,null,childs.stream().map(i->i.getId()).collect(Collectors.toList()));
if(!tips.isOk()){
return ResponseHelper.failed("budget-not-enought",tips.getMsg()+" 相关任务【"+childs.stream().map(i->i.getName()).collect(Collectors.joining(","))+"】");
}
}
}
} }
for (XmTask t : canInsertTasks) {
xmRecordService.addXmTaskRecord(t.getProjectId(), t.getId(), "项目-任务-批量修改任务预算", "修改任务预算"+t.getName(),JSON.toJSONString(t),null);
}
}
//过滤掉我没有权限的
List<XmTask> canUpdateTasks=canOpTasks.stream().filter(i->xmTaskDbMap.containsKey(i.getId())).collect(Collectors.toList());
List<XmTask> canInsertTasks=canOpTasks.stream().filter(i->!xmTaskDbMap.containsKey(i.getId())).collect(Collectors.toList());
xmTaskService.batchInsertOrUpdate(canInsertTasks,canUpdateTasks);
for (XmTask t : canUpdateTasks) {
xmRecordService.addXmTaskRecord(t.getProjectId(), t.getId(), "项目-任务-批量修改任务预算", "修改任务预算"+t.getName(),JSON.toJSONString(t),null);
}
for (XmTask t : canInsertTasks) {
xmRecordService.addXmTaskRecord(t.getProjectId(), t.getId(), "项目-任务-批量修改任务预算", "修改任务预算"+t.getName(),JSON.toJSONString(t),null);
}
if(canOpTasks.size()<=0){
tips.setFailureMsg("成功修改0个任务。当前任务均无权限操作,只有组长助理、组长、项目助理、项目经理有权限批量修改预算。");
}else if(canOpTasks.size()==xmTasks.size()){
tips.setOkMsg("成功修改"+canOpTasks.size()+"个任务。");
}else { }else {
tips=judgetTips;
tips.setOkMsg("成功修改"+canOpTasks.size()+"个任务。其中以下任务无权限修改。【"+noAllowTasksDbMap.values().stream().map(i->i.getName()).collect(Collectors.joining(","))+"】");
} }
}catch (BizException e) { }catch (BizException e) {

54
xm-core/src/main/java/com/xm/core/service/XmTaskService.java

@ -67,8 +67,8 @@ public class XmTaskService extends BaseService {
* @param addTaskBudgetCost * @param addTaskBudgetCost
* @return * @return
*/ */
public Tips judgetBudget(String projectPhaseId,BigDecimal addTaskBudgetCost,BigDecimal addTaskBudgetInnerUserAt,BigDecimal addTaskBudgetOutUserAt,BigDecimal addTaskBudgetNouserAt,List<String> excludeTaskIds){
Tips tips=new Tips("检查预算成功");
public Tips judgetPhaseBudget(String projectPhaseId, BigDecimal addTaskBudgetCost, BigDecimal addTaskBudgetInnerUserAt, BigDecimal addTaskBudgetOutUserAt, BigDecimal addTaskBudgetNouserAt, List<String> excludeTaskIds){
Tips tips=new Tips("成功");
if(!StringUtils.hasText(projectPhaseId)){ if(!StringUtils.hasText(projectPhaseId)){
tips.setFailureMsg("projectPhaseId参数不能为空"); tips.setFailureMsg("projectPhaseId参数不能为空");
return tips; return tips;
@ -91,7 +91,8 @@ public class XmTaskService extends BaseService {
} }
if(addTaskBudgetNouserAt==null) { if(addTaskBudgetNouserAt==null) {
addTaskBudgetNouserAt=BigDecimal.ZERO; addTaskBudgetNouserAt=BigDecimal.ZERO;
}
}
BigDecimal phaseBudgetAt=NumberUtil.getBigDecimal(g.get("phaseBudgetAt"),zero);
BigDecimal phaseBudgetInnerUserAt=NumberUtil.getBigDecimal(g.get("phaseBudgetInnerUserAt"),zero); BigDecimal phaseBudgetInnerUserAt=NumberUtil.getBigDecimal(g.get("phaseBudgetInnerUserAt"),zero);
BigDecimal phaseBudgetOutUserAt=NumberUtil.getBigDecimal(g.get("phaseBudgetOutUserAt"),zero); BigDecimal phaseBudgetOutUserAt=NumberUtil.getBigDecimal(g.get("phaseBudgetOutUserAt"),zero);
BigDecimal phaseBudgetNouserAt=NumberUtil.getBigDecimal(g.get("phaseBudgetNouserAt"),zero); BigDecimal phaseBudgetNouserAt=NumberUtil.getBigDecimal(g.get("phaseBudgetNouserAt"),zero);
@ -101,7 +102,7 @@ public class XmTaskService extends BaseService {
BigDecimal taskBudgetNouserAt=NumberUtil.getBigDecimal(g.get("taskBudgetNouserAt"),zero); BigDecimal taskBudgetNouserAt=NumberUtil.getBigDecimal(g.get("taskBudgetNouserAt"),zero);
BigDecimal taskBudgetTotalCost=NumberUtil.getBigDecimal(g.get("budgetCost"),zero); BigDecimal taskBudgetTotalCost=NumberUtil.getBigDecimal(g.get("budgetCost"),zero);
/**
if(addTaskBudgetInnerUserAt.add(taskBudgetInnerUserAt).compareTo(phaseBudgetInnerUserAt)>0) { if(addTaskBudgetInnerUserAt.add(taskBudgetInnerUserAt).compareTo(phaseBudgetInnerUserAt)>0) {
tips.setFailureMsg("内部人力预算超出项目内部人力预算"); tips.setFailureMsg("内部人力预算超出项目内部人力预算");
return tips; return tips;
@ -114,17 +115,52 @@ public class XmTaskService extends BaseService {
tips.setFailureMsg("非人力预算超出项目非人力预算"); tips.setFailureMsg("非人力预算超出项目非人力预算");
return tips; return tips;
} }
BigDecimal phaseBudgetAt=phaseBudgetCost.add(phaseBudgetInnerUserAt).add(phaseBudgetOutUserAt).add(phaseBudgetNouserAt);
if(phaseBudgetAt.compareTo(taskBudgetTotalCost)<0) {
tips.setFailureMsg("任务合计总预算超出计划总预算");
**/
BigDecimal totalTaskBudgetAt=taskBudgetTotalCost.add(addTaskBudgetCost);
if(phaseBudgetAt.compareTo(totalTaskBudgetAt)<0) {
tips.setFailureMsg("任务合计总预算超出计划总预算"+totalTaskBudgetAt.subtract(phaseBudgetAt)+"元");
return tips; return tips;
}else { }else {
return tips; return tips;
} }
}
/**
*
*
ifnull(p.budget_cost,0) as budget_cost,
ifnull(p.budget_workload,0) as budget_workload,
sum( ifnull(res.budget_cost,0) ) AS child_budget_cost,
sum( ifnull(res.budget_workload,0) ) AS child_budget_workload
* 判断新增预算是否超出项目总预算
* @param addTaskBudgetCost
* @return
*/
public Tips judgetTaskBudget(String parentTaskid, BigDecimal addTaskBudgetCost, BigDecimal addTaskBudgetInnerUserAt, BigDecimal addTaskBudgetOutUserAt, BigDecimal addTaskBudgetNouserAt, List<String> excludeTaskIds){
Tips tips=new Tips("成功");
if(!StringUtils.hasText(parentTaskid)){
tips.setFailureMsg("parentTaskid参数不能为空");
return tips;
}
Map<String,Object> g=this.selectTotalTaskBudgetCost(parentTaskid,excludeTaskIds);
if(g==null || g.isEmpty()){
return tips;
}
BigDecimal budgetCost=NumberUtil.getBigDecimal(g.get("budgetCost"));
BigDecimal childBudgetCost=NumberUtil.getBigDecimal(g.get("childBudgetCost"));
if(budgetCost.compareTo(childBudgetCost)<0) {
tips.setFailureMsg("任务合计总预算超出上级总预算"+childBudgetCost.subtract(budgetCost)+"元");
return tips;
}else {
return tips;
}
} }
private Map<String, Object> selectTotalTaskBudgetCost(String parentTaskid, List<String> excludeTaskIds) {
return selectOne("selectTotalTaskBudgetCost",map("parentTaskid",parentTaskid,"excludeTaskIds",excludeTaskIds));
}
public void updateTaskChildrenCntByTaskId(String taskId){ public void updateTaskChildrenCntByTaskId(String taskId){
super.update("updateTaskChildrenCntByTaskId",taskId); super.update("updateTaskChildrenCntByTaskId",taskId);
@ -155,7 +191,6 @@ public class XmTaskService extends BaseService {
if(StringUtils.isEmpty(xmTaskVo.getMilestone())){ if(StringUtils.isEmpty(xmTaskVo.getMilestone())){
xmTaskVo.setMilestone("0"); xmTaskVo.setMilestone("0");
} }
this.parentIdPathsCalcBeforeSave(xmTaskVo);
XmTask xmTask = new XmTask(); XmTask xmTask = new XmTask();
BeanUtils.copyProperties(xmTaskVo,xmTask); BeanUtils.copyProperties(xmTaskVo,xmTask);
this.insert(xmTask); this.insert(xmTask);
@ -446,6 +481,7 @@ public class XmTaskService extends BaseService {
Tips tips = new Tips("成功"); Tips tips = new Tips("成功");
if (!StringUtils.hasText(currNode.getParentTaskid()) || "0".equals(currNode.getParentTaskid())) { if (!StringUtils.hasText(currNode.getParentTaskid()) || "0".equals(currNode.getParentTaskid())) {
currNode.setPidPaths("0," + currNode.getId() + ","); currNode.setPidPaths("0," + currNode.getId() + ",");
currNode.setLvl(1);
return tips; return tips;
} else { } else {
List<XmTask> parentList=this.getParentList(currNode); List<XmTask> parentList=this.getParentList(currNode);

56
xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskMapper.xml

@ -148,29 +148,59 @@
delete from xm_task delete from xm_task
where biz_proc_inst_id=#{procInstId} where biz_proc_inst_id=#{procInstId}
</delete> </delete>
<!-- 查询任务总的预算及对应的计划的预算,任务总预算不能大于计划总预算 -->
<select id="selectTotalTaskBudgetCost" parameterType="HashMap" resultType="HashMap">
SELECT
ifnull(p.budget_cost,0) as budget_cost,
ifnull(p.budget_workload,0) as budget_workload,
tc.*
FROM xm_task p LEFT JOIN
(select
res.parent_taskid,
sum( ifnull(res.budget_cost,0) ) AS child_budget_cost,
sum( ifnull(res.budget_workload,0) ) AS child_budget_workload
from
xm_task res where res.parent_taskid=#{parentTaskid} and res.lvl=1
<if test=" excludeTaskIds !=null "> and res.id not in
<foreach collection="excludeTaskIds" item="item" index="index" open="(" separator="," close=")" >
#{item}
</foreach>
</if>
) as tc ON p.id = tc.parent_taskid
WHERE
p.id = #{parentTaskid}
</select>
<!-- 查询任务总的预算及对应的计划的预算,任务总预算不能大于计划总预算 --> <!-- 查询任务总的预算及对应的计划的预算,任务总预算不能大于计划总预算 -->
<select id="selectTotalPhaseAndTaskBudgetCost" parameterType="HashMap" resultType="HashMap"> <select id="selectTotalPhaseAndTaskBudgetCost" parameterType="HashMap" resultType="HashMap">
SELECT SELECT
sum( ifnull(res.budget_cost,0) ) AS budget_cost,
sum( case when res.task_out='1' then ifnull(res.budget_cost,0) else 0 end ) AS task_budget_out_user_at,
sum( case when res.task_out='1' then 0 else ifnull(res.budget_cost,0) end ) AS task_budget_inner_user_at,
sum(0) AS task_budget_nouser_at,
sum( res.budget_workload ) AS budget_workload,
p.phase_budget_nouser_at, p.phase_budget_nouser_at,
p.phase_budget_inner_user_at, p.phase_budget_inner_user_at,
p.phase_budget_out_user_at, p.phase_budget_out_user_at,
p.phase_budget_at,
p.phase_budget_workload, p.phase_budget_workload,
p.phase_budget_hours, p.phase_budget_hours,
p.phase_budget_staff_nu
FROM xm_project_phase p LEFT JOIN xm_task res
ON p.id = res.project_phase_id
p.phase_budget_staff_nu,
tc.*
FROM xm_project_phase p LEFT JOIN
(select
res.project_phase_id,
sum( ifnull(res.budget_cost,0) ) AS budget_cost,
sum( case when res.task_out='1' then ifnull(res.budget_cost,0) else 0 end ) AS task_budget_out_user_at,
sum( case when res.task_out='1' then 0 else ifnull(res.budget_cost,0) end ) AS task_budget_inner_user_at,
sum(0) AS task_budget_nouser_at,
sum( res.budget_workload ) AS budget_workload
from
xm_task res where res.project_phase_id=#{projectPhaseId} and res.lvl=1
<if test=" excludeTaskIds !=null "> and res.id not in
<foreach collection="excludeTaskIds" item="item" index="index" open="(" separator="," close=")" >
#{item}
</foreach>
</if>
) as tc ON p.id = tc.project_phase_id
WHERE WHERE
p.id = #{projectPhaseId} p.id = #{projectPhaseId}
<if test=" excludeTaskIds !=null "> and res.id not in
<foreach collection="excludeTaskIds" item="item" index="index" open="(" separator="," close=")" >
#{item}
</foreach>
</if>
</select> </select>
<!-- 通过条件查询获取数据列表 不分页 返回 list<Object> --> <!-- 通过条件查询获取数据列表 不分页 返回 list<Object> -->

Loading…
Cancel
Save