Browse Source

添加节点类型、标签等

master
陈裕财 4 years ago
parent
commit
c9f91cf3fb
  1. 16
      xm-core/src/main/java/com/xm/core/ctrl/XmProjectPhaseController.java
  2. 6
      xm-core/src/main/java/com/xm/core/ctrl/XmTaskController.java
  3. 50
      xm-core/src/main/java/com/xm/core/service/XmProjectPhaseService.java
  4. 45
      xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectPhaseMapper.xml

16
xm-core/src/main/java/com/xm/core/ctrl/XmProjectPhaseController.java

@ -441,19 +441,21 @@ public class XmProjectPhaseController {
Long exists=this.xmProjectPhaseService.checkExistsTask(phase.getId()); Long exists=this.xmProjectPhaseService.checkExistsTask(phase.getId());
if(exists>0) { if(exists>0) {
noDelList.add(phase.getPhaseName()); noDelList.add(phase.getPhaseName());
}else {
Long checkExistsChildren =xmProjectPhaseService.checkExistsChildren(phase.getId());
if(checkExistsChildren>0) {
hasChildList.add(phase.getPhaseName());
}else { }else {
delPhases.add(phase); delPhases.add(phase);
delCount=delCount+1;
xmRecordService.addXmPhaseRecord(phase.getProjectId(), phase.getId(), "项目-计划-删除计划", "删除计划"+phase.getPhaseName(),JSON.toJSONString(phase),null);
} }
}
List<XmProjectPhase> canDelNodes=new ArrayList<>();
for (XmProjectPhase phase : delPhases) {
boolean canDelAllChild =xmProjectPhaseService.checkCanDelAllChild(phase,xmProjectPhases);
if(!canDelAllChild) {
hasChildList.add(phase.getPhaseName());
}else {
canDelNodes.add(phase);
} }
} }
if(delPhases.size()>0){
if(canDelNodes.size()>0){
this.xmProjectPhaseService.doBatchDelete(delPhases); this.xmProjectPhaseService.doBatchDelete(delPhases);
} }
String noQxTips=""; String noQxTips="";

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

@ -1037,13 +1037,13 @@ public class XmTaskController {
List<String> msgs=new ArrayList<>(); List<String> msgs=new ArrayList<>();
msgs.add("删除了"+canDelNodes.size()+"个任务。"); msgs.add("删除了"+canDelNodes.size()+"个任务。");
if(hadChildNodes.size()>0){ if(hadChildNodes.size()>0){
msgs.add("以下"+hadChildNodes.size()+"个任务,【"+hadChildNodes.stream().map(i->i.getName()).collect(Collectors.joining(","))+"】存在未删除的子任务,不能删除。");
msgs.add("以下"+hadChildNodes.size()+"个任务存在未删除的子任务不能删除。【"+hadChildNodes.stream().map(i->i.getName()).collect(Collectors.joining(","))+"】");
} }
if(noAllowNodes.size()>0){ if(noAllowNodes.size()>0){
msgs.add("以下"+noAllowNodes.size()+"个任务【"+noAllowNodes.stream().map(i->i.getName()).collect(Collectors.joining(","))+"】您无权删除。");
msgs.add("以下"+noAllowNodes.size()+"个任务您无权删除。 【"+noAllowNodes.stream().map(i->i.getName()).collect(Collectors.joining(","))+"】");
} }
if(existsExecuserList.size()>0){ if(existsExecuserList.size()>0){
msgs.add("以下"+existsExecuserList.size()+"个任务,【"+existsExecuserList.stream().map(i->i.getName()).collect(Collectors.joining(","))+"】存在待结算的执行人,不能删除。");
msgs.add("以下"+existsExecuserList.size()+"个任务存在待结算的执行人不能删除。【"+existsExecuserList.stream().map(i->i.getName()).collect(Collectors.joining(","))+"】");
} }
if(canDelNodes.size()==0){ if(canDelNodes.size()==0){
tips.setFailureMsg(msgs.stream().collect(Collectors.joining("\n"))); tips.setFailureMsg(msgs.stream().collect(Collectors.joining("\n")));

50
xm-core/src/main/java/com/xm/core/service/XmProjectPhaseService.java

@ -148,13 +148,7 @@ public class XmProjectPhaseService extends BaseService {
@Transactional @Transactional
public int[] doBatchDelete(List<XmProjectPhase> batchValues) { public int[] doBatchDelete(List<XmProjectPhase> batchValues) {
int[] result= super.batchDelete(batchValues); int[] result= super.batchDelete(batchValues);
List<XmProjectPhase> list= batchValues.stream().filter(i->!batchValues.stream().filter(k->k.getId().equals(i.getParentPhaseId())).findAny().isPresent()).collect(Collectors.toList());
list=list.stream().filter(i-> StringUtils.hasText(i.getParentPhaseId())).collect(Collectors.toList());
if(list.size()>0){
this.updateChildrenCntByIds(list.stream().map(i->i.getParentPhaseId()).collect(Collectors.toSet()).stream().collect(Collectors.toList()));
batchSumParents(batchValues); batchSumParents(batchValues);
}
return result; return result;
} }
@ -194,6 +188,31 @@ public class XmProjectPhaseService extends BaseService {
return i; return i;
} }
/**
* 检查是否能删除干净所有儿子孙子节点
* @param delNode 当前删除节点
* @param delNodes 本批量需要删除的全部节点
* @return
*/
public boolean checkCanDelAllChild(XmProjectPhase delNode, List<XmProjectPhase> delNodes) {
if(delNode==null){
return true;
}
if(delNode.getChildrenCnt()==null||delNode.getChildrenCnt()<=0){
return true;
}
List<XmProjectPhase> childList=delNodes.stream().filter(i->delNode.getId().equals(i.getParentPhaseId())).collect(Collectors.toList());
if(childList==null||childList.size()<delNode.getChildrenCnt()){
return false;
}
for (XmProjectPhase n : childList) {
if (!this.checkCanDelAllChild(n, delNodes)) {
return false;
}
}
return true;
}
@Transactional @Transactional
public void batchInsertOrUpdate(List<XmProjectPhaseVo> xmProjectPhases) { public void batchInsertOrUpdate(List<XmProjectPhaseVo> xmProjectPhases) {
List<XmProjectPhaseVo> addList=new ArrayList<>(); List<XmProjectPhaseVo> addList=new ArrayList<>();
@ -396,9 +415,9 @@ public class XmProjectPhaseService extends BaseService {
} }
@Transactional @Transactional
public void batchSumParents(List<XmProjectPhase> xmTasks) {
public void batchSumParents(List<XmProjectPhase> xmProjectPhases) {
List<Set<String>> list=new ArrayList<>(); List<Set<String>> list=new ArrayList<>();
for (XmProjectPhase node : xmTasks) {
for (XmProjectPhase node : xmProjectPhases) {
String id=node.getId(); String id=node.getId();
String pidPaths=node.getPidPaths(); String pidPaths=node.getPidPaths();
if(!StringUtils.hasText(pidPaths)){ if(!StringUtils.hasText(pidPaths)){
@ -424,12 +443,21 @@ public class XmProjectPhaseService extends BaseService {
Set<String> set=list.get(i); Set<String> set=list.get(i);
set.add(pidPathss[i]); set.add(pidPathss[i]);
} }
if(list.size()<=0){
return;
}
Set<String> allSet=new HashSet<>(); Set<String> allSet=new HashSet<>();
for (int i = list.size() - 1; i >= 0; i--) { for (int i = list.size() - 1; i >= 0; i--) {
allSet.addAll(list.get(i));
Set<String> set=list.get(i);
if(set.size()>0){
List<String> ids=set.stream().filter(k->!allSet.contains(k)).collect(Collectors.toList());
if(ids.size()>0){
allSet.addAll(ids.stream().collect(Collectors.toSet()));
super.update("batchSumParents", ids);
} }
if(allSet.size()>0){
super.update("sumParents",allSet.stream().collect(Collectors.toList()));
}
} }

45
xm-core/src/main/resources/mybatis/mapper/xm/core/dao/XmProjectPhaseMapper.xml

@ -100,6 +100,7 @@
SELECT SELECT
t.project_id, t.project_id,
t.parent_phase_id, t.parent_phase_id,
count(1) as children_cnt,
sum(t.phase_act_inner_user_workload) as phase_act_inner_user_workload, sum(t.phase_act_inner_user_workload) as phase_act_inner_user_workload,
sum(t.phase_act_out_user_workload) as phase_act_out_user_workload, sum(t.phase_act_out_user_workload) as phase_act_out_user_workload,
sum(t.phase_act_workload) as phase_act_workload, sum(t.phase_act_workload) as phase_act_workload,
@ -123,10 +124,52 @@
res.act_rate= tc.act_rate, res.act_rate= tc.act_rate,
res.task_budget_workload=tc.task_budget_workload, res.task_budget_workload=tc.task_budget_workload,
res.task_budget_at=tc.task_budget_at, res.task_budget_at=tc.task_budget_at,
res.calc_time=now()
res.calc_time=now(),
res.children_cnt=ifnull(tc.children_cnt,0)
where res.id=#{item} and res.ntype='1' where res.id=#{item} and res.ntype='1'
</foreach> </foreach>
</update> </update>
<update id="batchSumParents" parameterType="List">
UPDATE XM.xm_project_phase res
LEFT JOIN (
SELECT
t.project_id,
t.parent_phase_id,
count(1) as children_cnt,
sum(t.phase_act_inner_user_workload) as phase_act_inner_user_workload,
sum(t.phase_act_out_user_workload) as phase_act_out_user_workload,
sum(t.phase_act_workload) as phase_act_workload,
sum(t.act_inner_user_at) as act_inner_user_at,
sum(t.act_out_user_at) as act_out_user_at,
sum(ifnull(t.act_rate,0)*ifnull(t.task_budget_workload,0))/ifnull(sum(ifnull(t.task_budget_workload,0.000001)),999999) as act_rate,
sum(t.task_budget_workload) as task_budget_workload,
sum(t.task_budget_at) as task_budget_at
FROM xm_project_phase t
WHERE
t.parent_phase_id in
<foreach collection="list" item="item" index="index" open="(" separator="," close=")" >
#{item}
</foreach>
GROUP BY
t.project_id,
t.parent_phase_id
) AS tc ON res.project_id = tc.project_id and res.id=tc.parent_phase_id
SET res.phase_act_inner_user_workload = tc.phase_act_inner_user_workload,
res.phase_act_out_user_workload = tc.phase_act_out_user_workload,
res.phase_act_workload = tc.phase_act_workload,
res.act_inner_user_at = tc.act_inner_user_at,
res.act_out_user_at = tc.act_out_user_at,
res.act_rate= tc.act_rate,
res.task_budget_workload=tc.task_budget_workload,
res.task_budget_at=tc.task_budget_at,
res.calc_time=now(),
res.children_cnt=ifnull(tc.children_cnt,0)
where res.id in
<foreach collection="list" item="item" index="index" open="(" separator="," close=")" >
#{item}
</foreach>
and res.ntype='1'
</update>
<!--结束 自定义sql函数区域--> <!--结束 自定义sql函数区域-->

Loading…
Cancel
Save