Browse Source

添加节点类型、标签等

master
陈裕财 4 years ago
parent
commit
d19f9cf960
  1. 58
      xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java
  2. 6
      xm-core/src/main/java/com/xm/core/service/XmTaskExecuserService.java
  3. 32
      xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmTaskMapper.xml

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

@ -437,8 +437,8 @@ public class XmTaskController {
if( !StringUtils.hasText(xmTaskVo.getMilestone()) ){
xmTaskVo.setMilestone("0");
}
if(xmTaskVo.getBudgetCost()==null){
xmTaskVo.setBudgetCost(BigDecimal.ZERO);
if(xmTaskVo.getBudgetAt()==null){
xmTaskVo.setBudgetAt(BigDecimal.ZERO);
}
if(StringUtils.isEmpty(xmTaskVo.getId())) {
xmTaskVo.setId(this.xmTaskService.createKey("id"));
@ -450,11 +450,11 @@ public class XmTaskController {
}
}
this.xmTaskService.parentIdPathsCalcBeforeSave(xmTaskVo);
if(xmTaskVo.getBudgetCost()!=null && xmTaskVo.getBudgetCost().compareTo(BigDecimal.ZERO)>0){
if(xmTaskVo.getBudgetAt()!=null && xmTaskVo.getBudgetAt().compareTo(BigDecimal.ZERO)>0){
if("0".equals(xmTaskVo.getPtype()) && xmTaskVo.getLvl()<=1){
xmTaskService.judgetProjectBudget(xmTaskVo.getProjectId(),xmTaskVo.getBudgetCost(),null);
xmTaskService.judgetProjectBudget(xmTaskVo.getProjectId(),xmTaskVo.getBudgetAt(),null);
}else{
tips=xmTaskService.judgetTaskBudget(xmTaskVo.getParentTaskid(), xmTaskVo.getBudgetCost(),null,null,null,null);
tips=xmTaskService.judgetTaskBudget(xmTaskVo.getParentTaskid(), xmTaskVo.getBudgetAt(),null,null,null,null);
}
}
if(tips.isOk()) {
@ -669,15 +669,15 @@ public class XmTaskController {
}
this.xmTaskService.parentIdPathsCalcBeforeSave(xmTaskVo);
if(xmTaskVo.getBudgetCost()==null)xmTaskVo.setBudgetCost(BigDecimal.ZERO);
if(xmTaskDb.getBudgetCost()==null)xmTaskDb.setBudgetCost(BigDecimal.ZERO);
if(xmTaskVo.getBudgetAt()==null)xmTaskVo.setBudgetAt(BigDecimal.ZERO);
if(xmTaskDb.getBudgetAt()==null)xmTaskDb.setBudgetAt(BigDecimal.ZERO);
List<String> excludeIds=new ArrayList<>();
excludeIds.add(xmTaskDb.getId());
if( xmTaskDb.getBudgetCost().compareTo(xmTaskVo.getBudgetCost())!=0){
if( xmTaskDb.getBudgetAt().compareTo(xmTaskVo.getBudgetAt())!=0){
if("0".equals(xmTaskDb.getPtype()) && xmTaskVo.getLvl()<=1){
tips=xmTaskService.judgetProjectBudget(xmTaskDb.getProjectId(), xmTaskVo.getBudgetCost(),excludeIds);
tips=xmTaskService.judgetProjectBudget(xmTaskDb.getProjectId(), xmTaskVo.getBudgetAt(),excludeIds);
}else if(StringUtils.hasText(xmTaskDb.getParentTaskid())){
tips=xmTaskService.judgetTaskBudget(xmTaskDb.getParentTaskid(), xmTaskVo.getBudgetCost(),null,null,null,excludeIds);
tips=xmTaskService.judgetTaskBudget(xmTaskDb.getParentTaskid(), xmTaskVo.getBudgetAt(),null,null,null,excludeIds);
}
}
@ -842,17 +842,17 @@ public class XmTaskController {
g.setPtype(batchImportVo.getPtype());
g.setProjectId(projectId);
g.setProductId(productId);
if(g.getBudgetCost()==null)g.setBudgetCost(BigDecimal.ZERO);
if(g.getBudgetAt()==null)g.setBudgetAt(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;
BigDecimal totalTaskBudgetAt=BigDecimal.ZERO;
for (XmTask task : tasksLvl1) {
totalTaskBudgetCost=totalTaskBudgetCost.add(task.getBudgetCost());
totalTaskBudgetAt=totalTaskBudgetAt.add(task.getBudgetAt());
}
if("0".equals(batchImportVo.getPtype())&&totalTaskBudgetCost.compareTo(BigDecimal.ZERO)>0){
tips=xmTaskService.judgetProjectBudget(projectId,totalTaskBudgetCost,tasksLvl1.stream().map(i->i.getId()).collect(Collectors.toList()));
if("0".equals(batchImportVo.getPtype())&&totalTaskBudgetAt.compareTo(BigDecimal.ZERO)>0){
tips=xmTaskService.judgetProjectBudget(projectId,totalTaskBudgetAt,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);
@ -864,13 +864,13 @@ public class XmTaskController {
if(tasks.size()>0){
Set<String> parentTaskIdSet=tasks.stream().map(i->i.getParentTaskid()).collect(Collectors.toSet());
for (String pid : parentTaskIdSet) {
BigDecimal childBudgetCost=BigDecimal.ZERO;
BigDecimal childBudgetAt=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());
childBudgetAt=childBudgetAt.add(child.getBudgetAt());
}
if(childBudgetCost.compareTo(BigDecimal.ZERO)>0){
tips= xmTaskService.judgetTaskBudget(pid,childBudgetCost,null,null,null,childs.stream().map(i->i.getId()).collect(Collectors.toList()));
if(childBudgetAt.compareTo(BigDecimal.ZERO)>0){
tips= xmTaskService.judgetTaskBudget(pid,childBudgetAt,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(","))+"】");
}
@ -1283,8 +1283,8 @@ public class XmTaskController {
if( "1".equals(xmTaskDb.getPtype()) && !xmTaskDb.getProductId().equals(task.getProductId()) ){
return ResponseHelper.failed("not-same-productId","所有任务必须同属于一个产品");
}
if(task.getBudgetCost()==null){
task.setBudgetCost(BigDecimal.ZERO);
if(task.getBudgetAt()==null){
task.setBudgetAt(BigDecimal.ZERO);
}
if(task.getBudgetWorkload()==null){
task.setBudgetWorkload(BigDecimal.ZERO);
@ -1320,13 +1320,13 @@ public class XmTaskController {
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;
BigDecimal totalTaskBudgetAt=BigDecimal.ZERO;
for (XmTask task : tasksLvl1) {
totalTaskBudgetCost=totalTaskBudgetCost.add(task.getBudgetCost());
totalTaskBudgetAt=totalTaskBudgetAt.add(task.getBudgetAt());
}
if("0".equals(xmTaskDb.getPtype()) && totalTaskBudgetCost.compareTo(BigDecimal.ZERO)>0){
tips=xmTaskService.judgetProjectBudget(xmTaskDb.getProjectId(),totalTaskBudgetCost,tasksLvl1.stream().map(i->i.getId()).collect(Collectors.toList()));
if("0".equals(xmTaskDb.getPtype()) && totalTaskBudgetAt.compareTo(BigDecimal.ZERO)>0){
tips=xmTaskService.judgetProjectBudget(xmTaskDb.getProjectId(),totalTaskBudgetAt,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);
@ -1346,13 +1346,13 @@ public class XmTaskController {
map.put(canOpTask.getParentTaskid(),childs);
}
for (Map.Entry<String, List<XmTask>> kv : map.entrySet()) {
BigDecimal childBudgetCost = BigDecimal.ZERO;
BigDecimal childBudgetAt = BigDecimal.ZERO;
List<XmTask> childs = kv.getValue();
for (XmTask child : childs) {
childBudgetCost = childBudgetCost.add(child.getBudgetCost());
childBudgetAt = childBudgetAt.add(child.getBudgetAt());
}
if (childBudgetCost.compareTo(BigDecimal.ZERO) > 0) {
tips = xmTaskService.judgetTaskBudget(kv.getKey(), childBudgetCost, null, null, null, childs.stream().map(i -> i.getId()).collect(Collectors.toList()));
if (childBudgetAt.compareTo(BigDecimal.ZERO) > 0) {
tips = xmTaskService.judgetTaskBudget(kv.getKey(), childBudgetAt, 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(",")) + "】");
}

6
xm-core/src/main/java/com/xm/core/service/XmTaskExecuserService.java

@ -250,7 +250,7 @@ public class XmTaskExecuserService extends BaseService {
List<Map<String,Object>> actCostAmountList=xmProjectMCostUserService.listSumForSettleGroupByTaskIdAndUserid(params);
BigDecimal addSettleAmount=BigDecimal.ZERO;
BigDecimal allActCostAmount=BigDecimal.ZERO;
BigDecimal taskBudgetCost=NumberUtil.getBigDecimal(xmTaskDb.getBudgetCost(),BigDecimal.ZERO);
BigDecimal taskBudgetAt=NumberUtil.getBigDecimal(xmTaskDb.getBudgetAt(),BigDecimal.ZERO);
Map<String,Map<String,Object>> actCostAmountMap=new HashMap<>();
XmTaskExecuser execuserQuery=new XmTaskExecuser();
execuserQuery.setTaskId(taskId);
@ -304,12 +304,12 @@ public class XmTaskExecuserService extends BaseService {
if(settleAmount.add(userActCostAmount).compareTo(quoteAmount)>0) {
throw new BizException(xmTaskExecuserDB.getUsername()+"的结算金额不能大于报价金额,剩余"+quoteAmount.subtract(userActCostAmount)+"元可结算");
}
if(settleAmount.add(userActCostAmount).compareTo(taskBudgetCost)>0) {
if(settleAmount.add(userActCostAmount).compareTo(taskBudgetAt)>0) {
throw new BizException(xmTaskExecuserDB.getUsername()+"的总结算金额不能大于任务总预算金额");
}
}
if(allActCostAmount.add(addSettleAmount).compareTo(taskBudgetCost)>0) {
if(allActCostAmount.add(addSettleAmount).compareTo(taskBudgetAt)>0) {
throw new BizException(xmTaskDb.getName()+"结算总金额已经超出任务预算");
}
for (XmTaskExecuser xmTaskExecuser : xmTaskExecuserList) {

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

@ -170,13 +170,13 @@
<!-- 查询任务总的预算及对应的计划的预算,任务总预算不能大于计划总预算 -->
<select id="selectTotalTaskBudgetCost" parameterType="HashMap" resultType="HashMap">
SELECT
ifnull(p.budget_cost,0) as budget_cost,
ifnull(p.budget_at,0) as budget_at,
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_at,0) ) AS child_budget_at,
sum( ifnull(res.budget_workload,0) ) AS child_budget_workload
from
xm_task res where res.parent_taskid=#{parentTaskid} and res.lvl=1
@ -204,9 +204,9 @@
FROM xm_phase p LEFT JOIN
(select
res.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_ouser_at,
sum( case when res.task_out='1' then 0 else ifnull(res.budget_cost,0) end ) AS task_budget_iuser_at,
sum( ifnull(res.budget_at,0) ) AS budget_at,
sum( case when res.task_out='1' then ifnull(res.budget_at,0) else 0 end ) AS task_budget_ouser_at,
sum( case when res.task_out='1' then 0 else ifnull(res.budget_at,0) end ) AS task_budget_iuser_at,
sum(0) AS task_budget_nouser_at,
sum( res.budget_workload ) AS budget_workload
from
@ -236,9 +236,9 @@
SELECT
t.parent_taskid,
count(1) as children_cnt,
sum( ifnull( t.budget_cost, 0 ) ) AS budget_cost,
sum( ifnull( t.budget_at, 0 ) ) AS budget_at,
sum( ifnull( t.budget_workload, 0 ) ) AS budget_workload,
sum( ifnull( t.act_cost, 0 ) ) AS act_cost,
sum( ifnull( t.act_at, 0 ) ) AS act_at,
sum( ifnull( t.act_workload, 0 ) ) AS act_workload,
sum( ifnull( t.budget_workload, 0 ) * ifnull( t.rate, 0 ) ) AS budget_workload_rate,
sum( ifnull(t.rate,0)) as total_rate,
@ -258,8 +258,8 @@
SET
res.budget_workload=ifnull(t2.budget_workload,0),
res.budget_cost=ifnull(t2.budget_cost,0),
res.act_cost = t2.act_cost,
res.budget_at=ifnull(t2.budget_at,0),
res.act_at = t2.act_at,
res.act_workload = t2.act_workload,
res.rate = case when (ifnull(t2.budget_workload,0) >0) then ifnull(t2.act_workload,0)*100/(ifnull(t2.budget_workload,0) )
when t2.act_workload >0 then 100
@ -286,9 +286,9 @@
SELECT
t.parent_taskid,
count(1) as children_cnt,
sum( ifnull( t.act_cost, 0 ) ) AS act_cost,
sum( ifnull( t.act_at, 0 ) ) AS act_at,
sum( ifnull( t.act_workload, 0 ) ) AS act_workload,
sum( ifnull( t.budget_cost, 0 ) ) AS budget_cost,
sum( ifnull( t.budget_at, 0 ) ) AS budget_at,
sum( ifnull( t.budget_workload, 0 ) * ifnull( t.rate, 0 ) ) as budget_workload_rate,
sum( ifnull(t.rate,0)) as total_rate,
sum( ifnull( t.budget_workload, 0 )) as budget_workload,
@ -303,8 +303,8 @@
) t2 ON t2.parent_taskid = res.id
SET
res.budget_workload=ifnull(t2.budget_workload,0),
res.budget_cost=ifnull(t2.budget_cost,0),
res.act_cost = t2.act_cost,
res.budget_at=ifnull(t2.budget_at,0),
res.act_at = t2.act_at,
res.act_workload = t2.act_workload,
res.rate = case when ( ifnull(t2.budget_workload,0)>0) then ifnull(t2.act_workload,0)*100/( ifnull(t2.budget_workload,0))
when t2.act_workload >0 then 100
@ -324,7 +324,7 @@
<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
select p.id,p.name,p.plan_total_cost,sum(budget_at) as budget_at from xm_project p left join xm_task t on t.project_id=p.id
where p.id=#{projectId} and t.lvl=1 and t.id not in
<foreach collection="excludeTaskIds" item="item" index="index" open="(" separator="," close=")" >
#{item}
@ -359,11 +359,11 @@
</update>
<update id="updateActCostAndActWorkloadAfterSettle" parameterType="HashMap">
update xm_task res left join (
select u.task_id, sum(u.act_cost_amount) as act_cost_amount ,sum(u.act_workload) as act_workload from xm_project_m_cost_user u
select u.task_id, sum(u.act_at_amount) as act_at_amount ,sum(u.act_workload) as act_workload from xm_project_m_cost_user u
where u.task_id=#{id}
group by u.task_id
) as cu on cu.task_id=res.id
set res.act_workload=ifnull(cu.act_workload,0),res.act_cost=ifnull(cu.act_cost_amount,0),
set res.act_workload=ifnull(cu.act_workload,0),res.act_at=ifnull(cu.act_at_amount,0),
res.task_state=ifnull(#{taskState},res.task_state)
where id=#{id}
</update>

Loading…
Cancel
Save