Browse Source

添加节点类型、标签等

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

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

@ -130,7 +130,6 @@ public class XmTaskController {
String taskOut= (String) xmTask.get("taskOut"); String taskOut= (String) xmTask.get("taskOut");
if(!"1".equals(taskOut)){ if(!"1".equals(taskOut)){
String projectId= (String) xmTask.get("projectId"); String projectId= (String) xmTask.get("projectId");
String projectPhaseId= (String) xmTask.get("projectPhaseId");
String myExecuserStatus= (String) xmTask.get("myExecuserStatus"); String myExecuserStatus= (String) xmTask.get("myExecuserStatus");
String isMy= (String) xmTask.get("isMy"); String isMy= (String) xmTask.get("isMy");
String myFocus= (String) xmTask.get("myFocus"); String myFocus= (String) xmTask.get("myFocus");
@ -141,7 +140,7 @@ public class XmTaskController {
String iterationId= (String) xmTask.get("iterationId"); String iterationId= (String) xmTask.get("iterationId");
User user = LoginUtils.getCurrentUserInfo(); User user = LoginUtils.getCurrentUserInfo();
xmTask.put("userid",user.getUserid()); xmTask.put("userid",user.getUserid());
if( !(StringUtils.hasText(projectId) || StringUtils.hasText(projectPhaseId)
if( !(StringUtils.hasText(projectId)
|| StringUtils.hasText(myExecuserStatus)|| StringUtils.hasText(isMy)|| StringUtils.hasText(myFocus)|| StringUtils.hasText(createUserid) || StringUtils.hasText(myExecuserStatus)|| StringUtils.hasText(isMy)|| StringUtils.hasText(myFocus)|| StringUtils.hasText(createUserid)
|| StringUtils.hasText(executorUserid) || StringUtils.hasText(menuId) || StringUtils.hasText(productId)|| StringUtils.hasText(iterationId)) ){ || StringUtils.hasText(executorUserid) || StringUtils.hasText(menuId) || StringUtils.hasText(productId)|| StringUtils.hasText(iterationId)) ){
@ -329,10 +328,11 @@ public class XmTaskController {
if(!StringUtils.hasText(xmTaskVo.getProjectId())){ if(!StringUtils.hasText(xmTaskVo.getProjectId())){
return ResponseHelper.failed("projectId-0","项目编号不能为空"); return ResponseHelper.failed("projectId-0","项目编号不能为空");
} }
/**
if(!StringUtils.hasText(xmTaskVo.getProjectPhaseId())){ if(!StringUtils.hasText(xmTaskVo.getProjectPhaseId())){
return ResponseHelper.failed("ProjectPhaseId-0","项目计划编号不能为空"); 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());
@ -352,16 +352,15 @@ public class XmTaskController {
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();
}
if(xmTaskVo.getBudgetCost()==null){ if(xmTaskVo.getBudgetCost()==null){
xmTaskVo.setBudgetCost(BigDecimal.ZERO); xmTaskVo.setBudgetCost(BigDecimal.ZERO);
} }
this.xmTaskService.parentIdPathsCalcBeforeSave(xmTaskVo); this.xmTaskService.parentIdPathsCalcBeforeSave(xmTaskVo);
if(xmTaskVo.getBudgetCost()!=null && xmTaskVo.getBudgetCost().compareTo(BigDecimal.ZERO)>0){ if(xmTaskVo.getBudgetCost()!=null && xmTaskVo.getBudgetCost().compareTo(BigDecimal.ZERO)>0){
if(xmTaskVo.getLvl()<=1){ if(xmTaskVo.getLvl()<=1){
tips=xmTaskService.judgetPhaseBudget(projectPhaseId, xmTaskVo.getBudgetCost(),null,null,null,null);
}else{
xmTaskService.judgetProjectBudget(xmTaskVo.getProjectId(),xmTaskVo.getBudgetCost(),null);
}else{
tips=xmTaskService.judgetTaskBudget(xmTaskVo.getParentTaskid(), xmTaskVo.getBudgetCost(),null,null,null,null); tips=xmTaskService.judgetTaskBudget(xmTaskVo.getParentTaskid(), xmTaskVo.getBudgetCost(),null,null,null,null);
} }
} }
@ -434,9 +433,8 @@ public class XmTaskController {
String taskOut= (String) xmTask.get("taskOut"); String taskOut= (String) xmTask.get("taskOut");
if(!"1".equals(taskOut)){ if(!"1".equals(taskOut)){
String projectId= (String) xmTask.get("projectId"); String projectId= (String) xmTask.get("projectId");
String projectPhaseId= (String) xmTask.get("projectPhaseId");
String userid= (String) xmTask.get("userid"); String userid= (String) xmTask.get("userid");
if( !(StringUtils.hasText(projectId) || StringUtils.hasText(projectPhaseId)|| StringUtils.hasText(userid) ) ){
if( !(StringUtils.hasText(projectId) || StringUtils.hasText(userid) ) ){
User user = LoginUtils.getCurrentUserInfo(); User user = LoginUtils.getCurrentUserInfo();
xmTask.put("cbranchId",user.getBranchId()); xmTask.put("cbranchId",user.getBranchId());
} }
@ -623,7 +621,6 @@ public class XmTaskController {
} }
} }
String projectPhaseId=xmTaskDb.getProjectPhaseId();
this.xmTaskService.parentIdPathsCalcBeforeSave(xmTaskVo); this.xmTaskService.parentIdPathsCalcBeforeSave(xmTaskVo);
if(xmTaskVo.getBudgetCost()==null)xmTaskVo.setBudgetCost(BigDecimal.ZERO); if(xmTaskVo.getBudgetCost()==null)xmTaskVo.setBudgetCost(BigDecimal.ZERO);
if(xmTaskDb.getBudgetCost()==null)xmTaskDb.setBudgetCost(BigDecimal.ZERO); if(xmTaskDb.getBudgetCost()==null)xmTaskDb.setBudgetCost(BigDecimal.ZERO);
@ -631,7 +628,7 @@ public class XmTaskController {
excludeIds.add(xmTaskDb.getId()); excludeIds.add(xmTaskDb.getId());
if( xmTaskDb.getBudgetCost().compareTo(xmTaskVo.getBudgetCost())!=0){ if( xmTaskDb.getBudgetCost().compareTo(xmTaskVo.getBudgetCost())!=0){
if(xmTaskVo.getLvl()<=1){ if(xmTaskVo.getLvl()<=1){
tips=xmTaskService.judgetPhaseBudget(projectPhaseId, xmTaskVo.getBudgetCost(),null,null,null,excludeIds);
tips=xmTaskService.judgetProjectBudget(xmTaskDb.getProjectId(), xmTaskVo.getBudgetCost(),excludeIds);
}else{ }else{
tips=xmTaskService.judgetTaskBudget(xmTaskDb.getParentTaskid(), xmTaskVo.getBudgetCost(),null,null,null,excludeIds); tips=xmTaskService.judgetTaskBudget(xmTaskDb.getParentTaskid(), xmTaskVo.getBudgetCost(),null,null,null,excludeIds);
} }
@ -787,18 +784,12 @@ public class XmTaskController {
return m; return m;
} }
XmTask xmTask=xmTasks.get(0); XmTask xmTask=xmTasks.get(0);
String projectPhaseId=xmTask.getProjectPhaseId();
String projectId=xmTask.getProjectId(); String projectId=xmTask.getProjectId();
if( !StringUtils.hasText(projectId) ){ if( !StringUtils.hasText(projectId) ){
tips.setFailureMsg("项目编号不能为空"); tips.setFailureMsg("项目编号不能为空");
m.put("tips", tips); m.put("tips", tips);
return m; return m;
} }
if( !StringUtils.hasText(projectPhaseId) ){
tips.setFailureMsg("计划编号不能为空");
m.put("tips", tips);
return m;
}
List<XmGroupVo> pgroups=groupService.getProjectGroupVoList(projectId); List<XmGroupVo> pgroups=groupService.getProjectGroupVoList(projectId);
if(pgroups==null || pgroups.size()==0){ if(pgroups==null || pgroups.size()==0){
@ -813,11 +804,6 @@ public class XmTaskController {
return m; return m;
} }
for (XmTask g : xmTasks) { for (XmTask g : xmTasks) {
if(!projectPhaseId.equals(g.getProjectPhaseId())){
tips.setFailureMsg("只能在同一个计划下批量导入任务");
m.put("tips", tips);
return m;
}
if(!projectId.equals(g.getProjectId())){ if(!projectId.equals(g.getProjectId())){
tips.setFailureMsg("只能在同一个项目下批量导入任务"); tips.setFailureMsg("只能在同一个项目下批量导入任务");
m.put("tips", tips); m.put("tips", tips);
@ -841,7 +827,7 @@ public class XmTaskController {
totalTaskBudgetCost=totalTaskBudgetCost.add(task.getBudgetCost()); totalTaskBudgetCost=totalTaskBudgetCost.add(task.getBudgetCost());
} }
if(totalTaskBudgetCost.compareTo(BigDecimal.ZERO)>0){ if(totalTaskBudgetCost.compareTo(BigDecimal.ZERO)>0){
tips=xmTaskService.judgetPhaseBudget(projectPhaseId,totalTaskBudgetCost,null,null,null,tasksLvl1.stream().map(i->i.getId()).collect(Collectors.toList()));
tips=xmTaskService.judgetProjectBudget(projectId,totalTaskBudgetCost,tasksLvl1.stream().map(i->i.getId()).collect(Collectors.toList()));
if(!tips.isOk()){ if(!tips.isOk()){
tips.setFailureMsg(tips.getMsg()+"相关任务【"+tasksLvl1.stream().map(i->i.getName()).collect(Collectors.joining(","))+"】"); tips.setFailureMsg(tips.getMsg()+"相关任务【"+tasksLvl1.stream().map(i->i.getName()).collect(Collectors.joining(","))+"】");
return ResponseHelper.failed(tips); return ResponseHelper.failed(tips);
@ -890,7 +876,8 @@ public class XmTaskController {
return m; return m;
} }
/**
*
@ApiOperation( value = "批量将任务与一个项目计划关联",notes="") @ApiOperation( value = "批量将任务与一个项目计划关联",notes="")
@ApiResponses({ @ApiResponses({
@ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}") @ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}")
@ -989,6 +976,7 @@ public class XmTaskController {
m.put("tips", tips); m.put("tips", tips);
return m; return m;
} }
**/
@ApiOperation( value = "批量将多个任务与一个用户需求关联",notes="") @ApiOperation( value = "批量将多个任务与一个用户需求关联",notes="")
@ApiResponses({ @ApiResponses({
@ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}") @ApiResponse(code = 200, message = "{tips:{isOk:true/false,msg:'成功/失败原因',tipscode:'失败时错误码'}")
@ -1250,17 +1238,11 @@ public class XmTaskController {
} }
XmTask xmTask=xmTasks.get(0); XmTask xmTask=xmTasks.get(0);
String projectId=xmTask.getProjectId(); String projectId=xmTask.getProjectId();
String projectPhaseId=xmTask.getProjectPhaseId();
if( !StringUtils.hasText(projectId) ){ if( !StringUtils.hasText(projectId) ){
tips.setFailureMsg("项目编号不能为空"); tips.setFailureMsg("项目编号不能为空");
m.put("tips", tips); m.put("tips", tips);
return m; return m;
} }
if( !StringUtils.hasText(projectPhaseId) ){
tips.setFailureMsg("计划编号不能为空");
m.put("tips", tips);
return m;
}
List<XmGroupVo> pgroups=groupService.getProjectGroupVoList(projectId); List<XmGroupVo> pgroups=groupService.getProjectGroupVoList(projectId);
if(pgroups==null || pgroups.size()==0){ if(pgroups==null || pgroups.size()==0){
tips.setFailureMsg("该项目还未建立项目团队,请先进行团队成员维护"); tips.setFailureMsg("该项目还未建立项目团队,请先进行团队成员维护");
@ -1281,11 +1263,6 @@ public class XmTaskController {
m.put("tips", tips); m.put("tips", tips);
return m; return m;
} }
if(!projectPhaseId.equals(task.getProjectPhaseId())){
tips.setFailureMsg("只能在同一个计划下批量修改任务");
m.put("tips", tips);
return m;
}
if(task.getBudgetCost()==null){ if(task.getBudgetCost()==null){
task.setBudgetCost(BigDecimal.ZERO); task.setBudgetCost(BigDecimal.ZERO);
} }
@ -1309,11 +1286,6 @@ public class XmTaskController {
tips.setFailureMsg("所有任务必须同属于一个项目"); tips.setFailureMsg("所有任务必须同属于一个项目");
m.put("tips", tips); m.put("tips", tips);
return m; return m;
}
if(!projectPhaseId.equals(task.getProjectPhaseId())){
tips.setFailureMsg("只能在同一个计划下批量修改任务");
m.put("tips", tips);
return m;
} }
boolean isHead=groupService.checkUserIsOtherUserTeamHeadOrAss(pgroups,task.getCreateUserid(),user.getUserid()); boolean isHead=groupService.checkUserIsOtherUserTeamHeadOrAss(pgroups,task.getCreateUserid(),user.getUserid());
if(!isHead){ if(!isHead){
@ -1333,7 +1305,7 @@ public class XmTaskController {
totalTaskBudgetCost=totalTaskBudgetCost.add(task.getBudgetCost()); totalTaskBudgetCost=totalTaskBudgetCost.add(task.getBudgetCost());
} }
if(totalTaskBudgetCost.compareTo(BigDecimal.ZERO)>0){ if(totalTaskBudgetCost.compareTo(BigDecimal.ZERO)>0){
tips=xmTaskService.judgetPhaseBudget(projectPhaseId,totalTaskBudgetCost,null,null,null,tasksLvl1.stream().map(i->i.getId()).collect(Collectors.toList()));
tips=xmTaskService.judgetProjectBudget(projectId,totalTaskBudgetCost,tasksLvl1.stream().map(i->i.getId()).collect(Collectors.toList()));
if(!tips.isOk()){ if(!tips.isOk()){
tips.setFailureMsg(tips.getMsg()+"相关任务【"+tasksLvl1.stream().map(i->i.getName()).collect(Collectors.joining(","))+"】"); tips.setFailureMsg(tips.getMsg()+"相关任务【"+tasksLvl1.stream().map(i->i.getName()).collect(Collectors.joining(","))+"】");
return ResponseHelper.failed(tips); return ResponseHelper.failed(tips);

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

@ -671,5 +671,30 @@ public class XmTaskService extends BaseService {
public void batchRelTasksWithPhase(BatchRelTasksWithPhase tasksPhase) { public void batchRelTasksWithPhase(BatchRelTasksWithPhase tasksPhase) {
super.update("batchRelTasksWithPhase",tasksPhase); super.update("batchRelTasksWithPhase",tasksPhase);
} }
public Map<String,Object> calcProjectAndTaskBudget(String projectId,List<String> excludeTaskIds){
Map<String,Object> map=new HashMap<>();
if(excludeTaskIds!=null){
map.put("excludeTaskIds",excludeTaskIds);
}
map.put("projectId",projectId);
return super.selectOne("calcProjectAndTaskBudget",map);
}
public Tips judgetProjectBudget(String projectId, BigDecimal addBudgetCost, List<String> excludeTaskIds) {
Tips tips=new Tips("成功");
Map<String,Object> data=this.calcProjectAndTaskBudget(projectId,excludeTaskIds);
if(data==null || data.isEmpty()){
tips.setFailureMsg("项目不存在");
return tips;
}
BigDecimal planTotalCost=NumberUtil.getBigDecimal(map().get("planTotalCost"),BigDecimal.ZERO);
BigDecimal taskBudgetCost=NumberUtil.getBigDecimal(map().get("budgetCost"),BigDecimal.ZERO);
BigDecimal chaochu=taskBudgetCost.add(addBudgetCost).subtract(planTotalCost);
if(chaochu.compareTo(BigDecimal.ZERO)>0){
tips.setFailureMsg("超出项目总预算"+chaochu+"元");
return tips;
}
return tips;
}
} }

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

@ -302,6 +302,16 @@
and res.ntype='1' and res.ntype='1'
</foreach> </foreach>
</update> </update>
<select id="calcProjectAndTaskBudget" resultType="HashMap" parameterType="HashMap">
select p.id,p.name,p.plan_total_cost,sum(budget_cost) as budget_cost from xm_project p left join xm_task t on t.project_id=p.id
where p.id=#{projectId} and task.lvl=1 and t.id not in
<foreach collection="excludeTaskIds" item="item" index="index" open="(" separator="," close=")" >
#{item}
</foreach>
group by p.id
</select>
<!--结束 自定义sql函数区域--> <!--结束 自定义sql函数区域-->

Loading…
Cancel
Save