Browse Source

添加节点类型、标签等

master
陈裕财 4 years ago
parent
commit
c9f91cf3fb
  1. 22
      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. 56
      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

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

@ -442,18 +442,20 @@ public class XmProjectPhaseController {
if(exists>0) {
noDelList.add(phase.getPhaseName());
}else {
Long checkExistsChildren =xmProjectPhaseService.checkExistsChildren(phase.getId());
if(checkExistsChildren>0) {
hasChildList.add(phase.getPhaseName());
}else {
delPhases.add(phase);
delCount=delCount+1;
xmRecordService.addXmPhaseRecord(phase.getProjectId(), phase.getId(), "项目-计划-删除计划", "删除计划"+phase.getPhaseName(),JSON.toJSONString(phase),null);
}
delPhases.add(phase);
}
}
if(delPhases.size()>0){
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(canDelNodes.size()>0){
this.xmProjectPhaseService.doBatchDelete(delPhases);
}
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<>();
msgs.add("删除了"+canDelNodes.size()+"个任务。");
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){
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){
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){
tips.setFailureMsg(msgs.stream().collect(Collectors.joining("\n")));

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

@ -148,14 +148,8 @@ public class XmProjectPhaseService extends BaseService {
@Transactional
public int[] doBatchDelete(List<XmProjectPhase> 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);
}
return result;
return result;
}
public XmProjectPhase autoCalcWorkload(XmProjectPhase phase) {
@ -188,12 +182,37 @@ public class XmProjectPhaseService extends BaseService {
public void updatePhaseChildrenCntByPhaseId(String phaseId){
super.update("updatePhaseChildrenCntByPhaseId",phaseId);
}
public Long checkExistsChildren(String phaseId) {
Long i= this.selectOne("checkExistsChildren", phaseId);
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
public void batchInsertOrUpdate(List<XmProjectPhaseVo> xmProjectPhases) {
List<XmProjectPhaseVo> addList=new ArrayList<>();
@ -396,9 +415,9 @@ public class XmProjectPhaseService extends BaseService {
}
@Transactional
public void batchSumParents(List<XmProjectPhase> xmTasks) {
public void batchSumParents(List<XmProjectPhase> xmProjectPhases) {
List<Set<String>> list=new ArrayList<>();
for (XmProjectPhase node : xmTasks) {
for (XmProjectPhase node : xmProjectPhases) {
String id=node.getId();
String pidPaths=node.getPidPaths();
if(!StringUtils.hasText(pidPaths)){
@ -424,12 +443,21 @@ public class XmProjectPhaseService extends BaseService {
Set<String> set=list.get(i);
set.add(pidPathss[i]);
}
if(list.size()<=0){
return;
}
Set<String> allSet=new HashSet<>();
for (int i = list.size() - 1; i >= 0; i--) {
allSet.addAll(list.get(i));
}
if(allSet.size()>0){
super.update("sumParents",allSet.stream().collect(Collectors.toList()));
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);
}
}
}

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

@ -100,6 +100,7 @@
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,
@ -123,10 +124,52 @@
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.calc_time=now(),
res.children_cnt=ifnull(tc.children_cnt,0)
where res.id=#{item} and res.ntype='1'
</foreach>
</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函数区域-->

Loading…
Cancel
Save