diff --git a/src/main/java/cn/palmte/work/bean/ZtreeNode.java b/src/main/java/cn/palmte/work/bean/ZTreeNode.java similarity index 78% rename from src/main/java/cn/palmte/work/bean/ZtreeNode.java rename to src/main/java/cn/palmte/work/bean/ZTreeNode.java index 51cc067..9cca399 100644 --- a/src/main/java/cn/palmte/work/bean/ZtreeNode.java +++ b/src/main/java/cn/palmte/work/bean/ZTreeNode.java @@ -4,14 +4,14 @@ package cn.palmte.work.bean; * { id:2, pId:0, name:"随意勾选 2", checked:true, open:true}, * @author xiongshiyan at 2021/11/18 , contact me with email yanshixiong@126.com or phone 15208384257 */ -public class ZtreeNode { +public class ZTreeNode { private String id; private String pId; private String name; - private boolean checked; - private boolean open = true; + private boolean checked = false; + private boolean open = false; - public ZtreeNode(String id, String pId, String name, boolean checked, boolean open) { + public ZTreeNode(String id, String pId, String name, boolean checked, boolean open) { this.id = id; this.pId = pId; this.name = name; @@ -19,6 +19,12 @@ public class ZtreeNode { this.open = open; } + public ZTreeNode(String id, String pId, String name) { + this.id = id; + this.pId = pId; + this.name = name; + } + public String getId() { return id; } diff --git a/src/main/java/cn/palmte/work/controller/backend/ProjectController.java b/src/main/java/cn/palmte/work/controller/backend/ProjectController.java index 1eb61b2..bb88a54 100644 --- a/src/main/java/cn/palmte/work/controller/backend/ProjectController.java +++ b/src/main/java/cn/palmte/work/controller/backend/ProjectController.java @@ -16,7 +16,6 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import org.activiti.engine.HistoryService; -import org.activiti.engine.RuntimeService; import org.activiti.engine.history.HistoricProcessInstance; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -456,8 +455,17 @@ public class ProjectController extends BaseController { actProcInsService.createProcInsPng(response, relationList.get(0).getProcessInsId()); } - - + /** + * 进入选择页面 + */ + @RequestMapping("/selectRoleUser") + public String selectRoleUser(@RequestParam int projectId, Map model) { + model.put("project", projectService.getProject(projectId)); + return "admin/project_select_role_user"; + } + /** + * 获取当前所有的角色和角色下的用户,根据项目决定是否check + */ @RequestMapping("/roleUsers") @ResponseBody public ResponseMsg roleUsers(@RequestParam int projectId) { @@ -468,15 +476,32 @@ public class ProjectController extends BaseController { { id:21, pId:2, name:"随意勾选 2-1"}, { id:22, pId:2, name:"随意勾选 2-2", open:true}, { id:23, pId:2, name:"随意勾选 2-3"}*/ - List ztreeNodes = new ArrayList<>(); - ztreeNodes.add(new ZtreeNode("1","0","随意勾选 1",false,true)); - ztreeNodes.add(new ZtreeNode("11","1","随意勾选 1-1",false,true)); - ztreeNodes.add(new ZtreeNode("12","1","随意勾选 1-2",false,true)); - ztreeNodes.add(new ZtreeNode("2","0","随意勾选 2",false,true)); - ztreeNodes.add(new ZtreeNode("21","2","随意勾选 2-1",false,true)); - ztreeNodes.add(new ZtreeNode("22","2","随意勾选 2-2",false,true)); - ztreeNodes.add(new ZtreeNode("23","2","随意勾选 2-3",false,true)); - return ResponseMsg.buildSuccessData(ztreeNodes); + List zTreeNodes = projectService.getZTreeNodes(projectId); + return ResponseMsg.buildSuccessData(zTreeNodes); + } + + /** + * 保存项目与用户的关系 + */ + @RequestMapping("/saveSelectRoleUser") + @ResponseBody + public ResponseMsg saveSelectRoleUser(@RequestBody String body) { + /*{ id:1, pId:0, name:"随意勾选 1", open:true}, + { id:11, pId:1, name:"随意勾选 1-1", open:true}, + { id:12, pId:1, name:"随意勾选 1-2", open:true}, + { id:2, pId:0, name:"随意勾选 2", checked:true, open:true}, + { id:21, pId:2, name:"随意勾选 2-1"}, + { id:22, pId:2, name:"随意勾选 2-2", open:true}, + { id:23, pId:2, name:"随意勾选 2-3"}*/ + JSONObject jsonObject = JSON.parseObject(body); + Integer projectId = jsonObject.getInteger("projectId"); + JSONArray array = jsonObject.getJSONArray("ids"); + String[] ids = new String[array.size()]; + for (int i = 0; i < array.size(); i++) { + ids[i] = array.getString(i); + } + projectService.saveProjectVisible(projectId, ids); + return ResponseMsg.buildSuccessMsg("成功"); } @InitBinder diff --git a/src/main/java/cn/palmte/work/model/ProjectVisible.java b/src/main/java/cn/palmte/work/model/ProjectVisible.java index a8c7fde..d1ebfe1 100644 --- a/src/main/java/cn/palmte/work/model/ProjectVisible.java +++ b/src/main/java/cn/palmte/work/model/ProjectVisible.java @@ -11,6 +11,8 @@ import javax.persistence.*; @Entity @Table(name = "project_visible") public class ProjectVisible { + public static final int TYPE_ROLE = 1; + public static final int TYPE_USER = 2; @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @@ -21,8 +23,9 @@ public class ProjectVisible { /** * 1按照角色,2按照人员 + * 为了简便,目前只存人员 */ - private String type; + private int type; private int tid; diff --git a/src/main/java/cn/palmte/work/model/ProjectVisibleRepository.java b/src/main/java/cn/palmte/work/model/ProjectVisibleRepository.java index 8e75a76..b7d0406 100644 --- a/src/main/java/cn/palmte/work/model/ProjectVisibleRepository.java +++ b/src/main/java/cn/palmte/work/model/ProjectVisibleRepository.java @@ -3,5 +3,9 @@ package cn.palmte.work.model; import org.springframework.data.jpa.repository.JpaRepository; +import java.util.List; + public interface ProjectVisibleRepository extends JpaRepository { + List findAllByProjectIdEqualsAndTypeEquals(int projectId, int type); + List findAllByProjectIdEquals(int projectId); } diff --git a/src/main/java/cn/palmte/work/service/ProjectService.java b/src/main/java/cn/palmte/work/service/ProjectService.java index e5bc5bc..466374a 100644 --- a/src/main/java/cn/palmte/work/service/ProjectService.java +++ b/src/main/java/cn/palmte/work/service/ProjectService.java @@ -7,16 +7,14 @@ import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; import top.jfunc.common.db.QueryHelper; import top.jfunc.common.db.bean.Page; import top.jfunc.common.db.utils.Pagination; import top.jfunc.common.utils.CollectionUtil; import top.jfunc.common.utils.StrUtil; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; /** * @author xiongshiyan at 2021/10/29 , contact me with email yanshixiong@126.com or phone 15208384257 @@ -33,6 +31,14 @@ public class ProjectService { private ActTaskDefService actTaskDefService; @Autowired private ProjectInstanceRelationRepository projectInstanceRelationRepository; + @Autowired + private DeptRepository deptRepository; + @Autowired + private ProjectVisibleRepository projectVisibleRepository; + @Autowired + private SysRoleRepository sysRoleRepository; + @Autowired + private AdminRepository adminRepository; private QueryHelper getQueryHelper(Map searchInfo) { @@ -96,7 +102,8 @@ public class ProjectService { Admin admin = InterfaceUtil.getAdmin(); int roleId = admin.getRoleId(); Integer adminId = admin.getId(); - queryHelper.addCondition("p.id in (SELECT pv1.project_id FROM project_visible pv1 WHERE pv1.type=1 AND pv1.tid=? UNION SELECT pv2.project_id FROM project_visible pv2 WHERE pv2.type=2 AND pv2.tid=?)", roleId, adminId); + //自己创建的肯定能看见 + queryHelper.addCondition("(p.creator_id=? OR p.id in (SELECT pv1.project_id FROM project_visible pv1 WHERE pv1.type=1 AND pv1.tid=? UNION SELECT pv2.project_id FROM project_visible pv2 WHERE pv2.type=2 AND pv2.tid=?))", adminId, roleId, adminId); return queryHelper; @@ -143,9 +150,9 @@ public class ProjectService { project.setApproveId(0); project.setApproveName(""); - //TODO 获取登录人的部门信息 - project.setDeptId(admin.getId()); - project.setDeptName("工程部"); + Dept one = deptRepository.findOne(admin.getDeptId()); + project.setDeptId(one.getId()); + project.setDeptName(one.getName()); Date now = new Date(); project.setCreateTime(now); @@ -218,4 +225,77 @@ public class ProjectService { one.setLastUpdateTime(new Date()); projectRepository.saveAndFlush(one); } + + + private static final String PREFIX_ROLE = "r-"; + private static final String PREFIX_USER = "u-"; + /** + * 把所有的角色和人员按照层级返回 + */ + public List getZTreeNodes(int projectId){ + List roleList = sysRoleRepository.findAllRole(); + List adminList = adminRepository.getAllEnable(); + List zTreeNodes = new ArrayList<>(roleList.size()+adminList.size()); + + List projectVisibles = projectVisibleRepository.findAllByProjectIdEquals(projectId); + List visibleRoleList = filterByType(projectVisibles, ProjectVisible.TYPE_ROLE); + List visibleUserList = filterByType(projectVisibles, ProjectVisible.TYPE_USER); + + + for (SysRole sysRole : roleList) { + zTreeNodes.add(new ZTreeNode(PREFIX_ROLE + sysRole.getId(), "0", sysRole.getName(), + isChecked(visibleRoleList, sysRole.getId()), false)); + zTreeNodes.addAll(filterAdmins(adminList, sysRole, visibleUserList)); + } + + return zTreeNodes; + } + + private List filterAdmins(List adminList, SysRole sysRole, List visibleUserList) { + List admins = adminList.stream() + .filter(a -> sysRole.getId() == a.getRoleId()) + .collect(Collectors.toList()); + if(CollectionUtil.isNotEmpty(admins)){ + ArrayList zTreeNodes = new ArrayList<>(admins.size()); + for (Admin admin : admins) { + zTreeNodes.add(new ZTreeNode(PREFIX_USER+admin.getId(),PREFIX_ROLE+sysRole.getId(),admin.getRealName(), + isChecked(visibleUserList, admin.getId()),false)); + } + return zTreeNodes; + } + + return Collections.emptyList(); + } + + private boolean isChecked(List visibleList, int id) { + return visibleList.stream().anyMatch(pv->pv.getTid()==id); + } + private List filterByType(List projectVisibles, int type){ + if(CollectionUtil.isEmpty(projectVisibles)){ + return Collections.emptyList(); + } + return projectVisibles.stream().filter(pv -> pv.getType() == type).collect(Collectors.toList()); + } + + public void saveProjectVisible(Integer projectId, String[] idss) { + //1.先清除以前的 + List projectVisibles = projectVisibleRepository.findAllByProjectIdEquals(projectId); + if(CollectionUtil.isNotEmpty(projectVisibles)){ + projectVisibleRepository.deleteInBatch(projectVisibles); + } + //2.再保存 + List pvs = new ArrayList<>(idss.length); + for (String s : idss) { + //只要用户的,角色的不要 + if(s.startsWith(PREFIX_USER)){ + ProjectVisible pv = new ProjectVisible(); + pv.setProjectId(projectId); + pv.setType(ProjectVisible.TYPE_USER); + //去掉前缀 + pv.setTid(Integer.parseInt(s.substring(PREFIX_USER.length()))); + pvs.add(pv); + } + } + projectVisibleRepository.save(pvs); + } } diff --git a/src/main/resources/static/assets/js/project_select_role_user.js b/src/main/resources/static/assets/js/project_select_role_user.js new file mode 100644 index 0000000..73e71eb --- /dev/null +++ b/src/main/resources/static/assets/js/project_select_role_user.js @@ -0,0 +1,57 @@ +$(function () { + + $("#save").click(function () { + var checkedNodes = zTreeNodes.getCheckedNodes(); + var ids = []; + checkedNodes.forEach(function (t) { + ids.push(t.id); + }); + var ps = { + projectId:$("input[name='projectId']").val(), + ids:ids + }; + postAjax(base+"/project/saveSelectRoleUser", ps, function (p,d) { + window.location.href=base+"/project/list"; + }); + }); + + + var params = { + projectId:$("input[name='projectId']").val() + }; + getAjax(base+"/project/roleUsers",params,function (p,d) { + zTreeNodes = initZTree(d); + }); + + function initZTree(data) { + var setting = { + check: { + enable: true + }, + data: { + simpleData: { + enable: true + } + } + }; + + /*var zNodes =[ + { id:1, pId:0, name:"随意勾选 1", open:true}, + { id:11, pId:1, name:"随意勾选 1-1", open:true}, + { id:111, pId:11, name:"随意勾选 1-1-1"}, + { id:112, pId:11, name:"随意勾选 1-1-2"}, + { id:12, pId:1, name:"随意勾选 1-2", open:true}, + { id:121, pId:12, name:"随意勾选 1-2-1"}, + { id:122, pId:12, name:"随意勾选 1-2-2"}, + { id:2, pId:0, name:"随意勾选 2", checked:true, open:true}, + { id:21, pId:2, name:"随意勾选 2-1"}, + { id:22, pId:2, name:"随意勾选 2-2", open:true}, + { id:221, pId:22, name:"随意勾选 2-2-1", checked:true}, + { id:222, pId:22, name:"随意勾选 2-2-2"}, + { id:23, pId:2, name:"随意勾选 2-3"} + ];*/ + var zTreeNodes = $.fn.zTree.init($("#treeSelectRoleUser"), setting, data.data); + return zTreeNodes; + } +}); + diff --git a/src/main/resources/templates/admin/project_list.ftl b/src/main/resources/templates/admin/project_list.ftl index 70565b2..778b008 100644 --- a/src/main/resources/templates/admin/project_list.ftl +++ b/src/main/resources/templates/admin/project_list.ftl @@ -3,7 +3,6 @@ <@defaultLayout.layout> -