Browse Source

添加节点类型、标签等

master
陈裕财 4 years ago
parent
commit
3d726040c6
  1. 8
      xm-core/src/main/java/com/xm/core/entity/XmProjectGroup.java
  2. 248
      xm-core/src/main/java/com/xm/core/service/XmProjectGroupService.java

8
xm-core/src/main/java/com/xm/core/entity/XmProjectGroup.java

@ -2,6 +2,8 @@ package com.xm.core.entity;
import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiModelProperty;
import io.swagger.models.auth.In;
import java.util.Date; import java.util.Date;
/** /**
@ -59,7 +61,7 @@ public class XmProjectGroup implements java.io.Serializable {
String pgroupId; String pgroupId;
@ApiModelProperty(notes="级别0级1级2级3级4级",allowEmptyValue=true,example="",allowableValues="") @ApiModelProperty(notes="级别0级1级2级3级4级",allowEmptyValue=true,example="",allowableValues="")
String lvl;
Integer lvl;
@ApiModelProperty(notes="上级编号路径逗号分割,0,开始,本组编号+逗号结束",allowEmptyValue=true,example="",allowableValues="") @ApiModelProperty(notes="上级编号路径逗号分割,0,开始,本组编号+逗号结束",allowEmptyValue=true,example="",allowableValues="")
String pidPaths; String pidPaths;
@ -175,7 +177,7 @@ public class XmProjectGroup implements java.io.Serializable {
/** /**
* 级别0级1级2级3级4级 * 级别0级1级2级3级4级
**/ **/
public void setLvl(String lvl) {
public void setLvl(Integer lvl) {
this.lvl = lvl; this.lvl = lvl;
} }
/** /**
@ -308,7 +310,7 @@ public class XmProjectGroup implements java.io.Serializable {
/** /**
* 级别0级1级2级3级4级 * 级别0级1级2级3级4级
**/ **/
public String getLvl() {
public Integer getLvl() {
return this.lvl; return this.lvl;
} }
/** /**

248
xm-core/src/main/java/com/xm/core/service/XmProjectGroupService.java

@ -19,6 +19,7 @@ import org.springframework.util.StringUtils;
import java.util.*; import java.util.*;
import java.util.function.Predicate; import java.util.function.Predicate;
import java.util.stream.Collectors;
/** /**
* 父类已经支持增删改查操作,因此,即使本类什么也不写,也已经可以满足一般的增删改查操作了.<br> * 父类已经支持增删改查操作,因此,即使本类什么也不写,也已经可以满足一般的增删改查操作了.<br>
@ -112,7 +113,6 @@ public class XmProjectGroupService extends BaseService {
xmProjectGroupUser.setGroupId(group.getId()); xmProjectGroupUser.setGroupId(group.getId());
xmProjectGroupUser.setJoinTime(new Date()); xmProjectGroupUser.setJoinTime(new Date());
xmProjectGroupUser.setStatus("0"); xmProjectGroupUser.setStatus("0");
xmProjectGroupUser.setId(xmProjectGroupUserService.createKey("id"));
groupUsers.add(xmProjectGroupUser); groupUsers.add(xmProjectGroupUser);
} }
@ -241,7 +241,6 @@ public class XmProjectGroupService extends BaseService {
if( guser !=null && guser.size()>0) { if( guser !=null && guser.size()>0) {
for (XmProjectGroupUser guser2 : guser) { for (XmProjectGroupUser guser2 : guser) {
guser2.setGroupId(gvo.getId()); guser2.setGroupId(gvo.getId());
guser2.setProjectId(projectId);
allUsersFromUi.add(guser2); allUsersFromUi.add(guser2);
} }
} }
@ -266,8 +265,6 @@ public class XmProjectGroupService extends BaseService {
} }
} }
if(!existsInDb) { if(!existsInDb) {
gu.setId(this.createKey("id"));
gu.setProjectId(projectId);
gu.setJoinTime(new Date()); gu.setJoinTime(new Date());
gu.setStatus("0"); gu.setStatus("0");
if(isPm || isProjectCreate ){ //项目创建者管理者平躺 if(isPm || isProjectCreate ){ //项目创建者管理者平躺
@ -277,7 +274,6 @@ public class XmProjectGroupService extends BaseService {
if(!gu.getUserid().equals(user.getUserid())){//不允许自己加自己 if(!gu.getUserid().equals(user.getUserid())){//不允许自己加自己
XmProjectGroupVo xmProjectGroupVo = groupVoMap.get(gu.getGroupId()); XmProjectGroupVo xmProjectGroupVo = groupVoMap.get(gu.getGroupId());
if (this.checkUserIsTeamHead(xmProjectGroupVo, user.getUserid())) { if (this.checkUserIsTeamHead(xmProjectGroupVo, user.getUserid())) {
gu.setIsHead("0");
allUsersAdd.add(gu); allUsersAdd.add(gu);
}else{ }else{
tipsList.add(gu.getUsername()+"添加到小组"+xmProjectGroupVo.getGroupName()+"不成功!只有项目创建人、管理者、组长可以添加人员。"); tipsList.add(gu.getUsername()+"添加到小组"+xmProjectGroupVo.getGroupName()+"不成功!只有项目创建人、管理者、组长可以添加人员。");
@ -397,8 +393,6 @@ public class XmProjectGroupService extends BaseService {
List<XmProjectGroupUser> allUsersEdit2=new ArrayList<>(); List<XmProjectGroupUser> allUsersEdit2=new ArrayList<>();
allUsersEdit.forEach(u->{ allUsersEdit.forEach(u->{
XmProjectGroupUser u2=new XmProjectGroupUser(); XmProjectGroupUser u2=new XmProjectGroupUser();
u2.setId(u.getId());
u2.setIsHead(u.getIsHead());
allUsersEdit2.add(u2); allUsersEdit2.add(u2);
xmProjectGroupUserService.updateSomeFieldByPk(u2); xmProjectGroupUserService.updateSomeFieldByPk(u2);
xmRecordService.addXmGroupRecord(projectId, u2.getGroupId(),"项目-团队-变更小组成员状态", "变更["+u.getUsername()+"]为 "+("0".equals(u2.getIsHead())?"普通组员":"组长"),u2.getUserid(),null); xmRecordService.addXmGroupRecord(projectId, u2.getGroupId(),"项目-团队-变更小组成员状态", "变更["+u.getUsername()+"]为 "+("0".equals(u2.getIsHead())?"普通组员":"组长"),u2.getUserid(),null);
@ -438,9 +432,7 @@ public class XmProjectGroupService extends BaseService {
userMap.put("userid", u.getUserid()); userMap.put("userid", u.getUserid());
userMap.put("username", u.getUsername()); userMap.put("username", u.getUsername());
users.add(userMap); users.add(userMap);
u.setId(xmProjectGroupUserService.createKey("id"));
u.setGroupId(gvo.getId()); u.setGroupId(gvo.getId());
u.setProjectId(projectId);
u.setJoinTime(new Date()); u.setJoinTime(new Date());
u.setStatus("0"); u.setStatus("0");
addGroupUsernames.add(u.getUsername()); addGroupUsernames.add(u.getUsername());
@ -726,5 +718,243 @@ public class XmProjectGroupService extends BaseService {
} }
return datas; return datas;
} }
public List<XmProjectGroup> parentIdPathsCalcBeforeSave(List<XmProjectGroup> nodes) {
List<XmProjectGroup> noExistsList=nodes.stream().filter(i->!nodes.stream().filter(k->k.getId().equals(i.getPgroupId())).findAny().isPresent()).collect(Collectors.toList());
noExistsList=noExistsList.stream().filter(i->StringUtils.hasText(i.getPgroupId())).collect(Collectors.toList());
Map<String,String> hadCalcMap=new HashMap<>();
for (XmProjectGroup node : noExistsList) {
if(hadCalcMap.containsKey(node.getPgroupId())){
String idPaths=hadCalcMap.get(node.getPgroupId());
node.setPidPaths(idPaths+node.getId()+",");
}else{
this.parentIdPathsCalcBeforeSave(node);
String idPaths=node.getPidPaths();
idPaths=idPaths.substring(0,idPaths.length()-node.getId().length()-1);
hadCalcMap.put(node.getPgroupId(),idPaths);
}
}
for (XmProjectGroup node : nodes) {
if(!StringUtils.hasText(node.getPgroupId())){
node.setPidPaths("0,"+node.getId()+",");
continue;
}
if(hadCalcMap.containsKey(node.getPgroupId())){
String idPaths=hadCalcMap.get(node.getPgroupId());
node.setPidPaths(idPaths+node.getId()+",");
}else{
List<XmProjectGroup> pnodeList=this.getParentList(node,nodes);
if(pnodeList==null ||pnodeList.size()==0){
node.setPidPaths("0,"+node.getPgroupId()+","+node.getId()+",");
continue;
}
XmProjectGroup topParent=pnodeList.get(pnodeList.size()-1);
String idPath="0,";
if(hadCalcMap.containsKey(topParent.getPgroupId())){
idPath=hadCalcMap.get(topParent.getPgroupId());
}
for (int i = pnodeList.size() - 1; i >= 0; i--) {
idPath=idPath+pnodeList.get(i).getId()+",";
}
node.setPidPaths(idPath+node.getId()+",");
}
}
for (XmProjectGroup node : nodes) {
String idPaths=node.getPidPaths();
String[] idpss=idPaths.split(",");
node.setLvl(idpss.length-1);
}
return nodes;
}
public static void main(String[] args) {
String idpaths="0,1,2,3,";
String[] idpss=idpaths.split(",");
int lvl=idpss.length;
}
public Tips parentIdPathsCalcBeforeSave(XmProjectGroup currNode) {
Tips tips = new Tips("成功");
if (!StringUtils.hasText(currNode.getPgroupId()) || "0".equals(currNode.getPgroupId())) {
currNode.setPidPaths("0," + currNode.getId() + ",");
return tips;
} else {
List<XmProjectGroup> parentList=this.getParentList(currNode);
if(parentList==null ||parentList.size()==0){
currNode.setPidPaths("0,"+currNode.getPgroupId()+","+currNode.getId()+",");
currNode.setLvl(2);
return tips;
}
String idPath="0,";
for (int i = parentList.size() - 1; i >= 0; i--) {
idPath=idPath+parentList.get(i).getId()+",";
}
currNode.setPidPaths(idPath+currNode.getId()+",");
String idPaths=currNode.getPidPaths();
String[] idpss=idPaths.split(",");
currNode.setLvl(idpss.length-1);
}
return tips;
}
private List<XmProjectGroup> getParentList(XmProjectGroup currNode){
List<XmProjectGroup> parentList=new ArrayList<>();
XmProjectGroup current=currNode;
while (true){
if(!StringUtils.hasText(current.getPgroupId()) || "0".equals(current.getPgroupId())){
return parentList;
}
XmProjectGroup query=new XmProjectGroup();
query.setId(current.getPgroupId());
current=this.selectOneObject(query);
if(current==null){
return parentList;
}
parentList.add(current);
}
}
private List<XmProjectGroup> getParentList(XmProjectGroup currNode,List<XmProjectGroup> nodes){
List<XmProjectGroup> parentList=new ArrayList<>();
XmProjectGroup current=currNode;
while (true){
if(!StringUtils.hasText(current.getPgroupId()) || "0".equals(current.getPgroupId())){
return parentList;
}
XmProjectGroup query=new XmProjectGroup();
query.setId(current.getPgroupId());
Optional<XmProjectGroup> optional=nodes.stream().filter(i->i.getId().equals(query.getId())).findFirst();
if(optional.isPresent()){
current=optional.get();
parentList.add(current);
}else{
return parentList;
}
}
}
@Transactional
public void sumParents(XmProjectGroup node){
String id=node.getId();
String pidPaths=node.getPidPaths();
if(!StringUtils.hasText(pidPaths)){
return;
}
if(!pidPaths.startsWith("0,")){
return;
}
if("0".equals(node.getNtype())&&pidPaths.endsWith(id+",")){
pidPaths=pidPaths.substring(2,pidPaths.indexOf(id));
}else{
pidPaths=pidPaths.substring(2);
}
if(!StringUtils.hasText(pidPaths)){
return;
}
String[] pidPathss=pidPaths.split(",");
List<String> pidPathsList=new ArrayList<>();
for (int i = pidPathss.length-1; i >=0; i--) {
pidPathsList.add(pidPathss[i]);
}
if(pidPathsList.size()>0){
super.update("sumParents",pidPathsList );
}
}
@Transactional
public void batchSumParents(List<XmProjectGroup> xmTasks) {
List<Set<String>> list=new ArrayList<>();
for (XmProjectGroup node : xmTasks) {
String id=node.getId();
String pidPaths=node.getPidPaths();
if(!StringUtils.hasText(pidPaths)){
continue;
}
if(!pidPaths.startsWith("0,")){
continue;
}
if("0".equals(node.getNtype())){
pidPaths=pidPaths.substring(2,pidPaths.indexOf(id));
}else{
pidPaths=pidPaths.substring(2);
}
if(!StringUtils.hasText(pidPaths)){
continue;
}
String[] pidPathss=pidPaths.split(",");
for (int i = 0; i <pidPathss.length; i++) {
if(list.size()<=i){
list.add(new HashSet<>());
}
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--) {
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);
}
}
}
}
}
public boolean checkExistsExecuser(XmProjectGroup node) {
String exec=node.getExeUserids();
if(!StringUtils.hasText(exec)){
return false;
}
if(exec.indexOf("(1)")>0 || exec.indexOf("(2)")>0|| exec.indexOf("(3)")>0|| exec.indexOf("(4)")>0|| exec.indexOf("(5)")>0){
return true;
}
return false;
}
/**
* 检查是否能删除干净所有儿子孙子节点
* @param delNode 当前删除节点
* @param delNodes 本批量需要删除的全部节点
* @return
*/
public boolean checkCanDelAllChild(XmProjectGroup delNode, List<XmProjectGroup> delNodes) {
if(delNode==null){
return true;
}
if(delNode.getChildrenCnt()==null||delNode.getChildrenCnt()<=0){
return true;
}
List<XmProjectGroup> childList=delNodes.stream().filter(i->delNode.getId().equals(i.getPgroupId())).collect(Collectors.toList());
if(childList==null||childList.size()<delNode.getChildrenCnt()){
return false;
}
for (XmProjectGroup n : childList) {
if (!this.checkCanDelAllChild(n, delNodes)) {
return false;
}
}
return true;
}
} }
Loading…
Cancel
Save