From 91fb9b739736ffc74436cc1e692a2bc95d6b3f3e Mon Sep 17 00:00:00 2001 From: erdanergou Date: Wed, 15 Mar 2023 16:55:16 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=83=A8=E9=97=A8=E3=80=81?= =?UTF-8?q?=E6=96=BD=E5=B7=A5=E5=8D=95=E4=BD=8D=E6=A0=91=E4=B8=8E=E9=80=89?= =?UTF-8?q?=E6=8B=A9=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controller/CompanyController.java | 35 ++- .../controller/PageController.java | 20 ++ .../mapper/ConstructionUnitMapper.xml | 1 + .../service/CompanyService.java | 16 +- .../service/impl/CompanyServiceImpl.java | 144 ++++++++++- .../service/impl/MaterialTypeServiceImpl.java | 8 +- .../utils/LinkInterfaceUtil.java | 35 ++- .../application-out.html | 241 +++++++++++++++--- .../pages/post/selectConstructionUnit.html | 56 ++++ .../templates/pages/post/selectManager.html | 2 +- .../templates/pages/post/selectPost.html | 57 +++++ .../depository_manage/TestForOther.java | 120 ++++++++- .../templates/pages/post/selectManager.html | 2 +- 13 files changed, 677 insertions(+), 60 deletions(-) create mode 100644 src/main/resources/templates/pages/post/selectConstructionUnit.html create mode 100644 src/main/resources/templates/pages/post/selectPost.html diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java b/src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java index ea2a9442..a5ba7526 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java @@ -359,7 +359,7 @@ public class CompanyController { * @param request * @return */ - @GetMapping("/treeMenus") + @GetMapping("/managerTreeMenus") public RestResponse InitTreeMenus(HttpServletRequest request) { List list = new ArrayList<>(); String token = request.getHeader("user-token"); @@ -367,10 +367,41 @@ public class CompanyController { token = (String) request.getSession().getAttribute("userToken"); } UserByPort userToken = AuthenticationTokenPool.getUserToken(token); - list = companyService.InitTreeMenus(userToken); + list = companyService.InitTreeMenusForHearder(userToken); return new RestResponse(list); } + /** + * 用于构造当前用户可见的部门树 + * @return + */ + @GetMapping("/postTreeMenus") + public RestResponse postTreeMenus(HttpServletRequest request){ + List list = new ArrayList<>(); + String token = request.getHeader("user-token"); + if (token == null) { + token = (String) request.getSession().getAttribute("userToken"); + } + UserByPort userToken = AuthenticationTokenPool.getUserToken(token); + list = companyService.buildPostTree(userToken); + return new RestResponse(list); + } + + + /** + * 用于构造当前用户可见的部门树 + * @return + */ + @GetMapping("/constructionUnitTree") + public RestResponse constructionUnitTree(HttpServletRequest request){ + List list = new ArrayList<>(); + list = companyService.buildConstructionUnitTree(); + return new RestResponse(list); + } + + + + /** * 用于获取企业微信通讯录下的结构 diff --git a/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java b/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java index 74e0026b..b4c7dc32 100644 --- a/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java +++ b/src/main/java/com/dreamchaser/depository_manage/controller/PageController.java @@ -642,6 +642,26 @@ public class PageController { return mv; } + + // 部门菜单页面 + @GetMapping("/selectPost") + public ModelAndView selectPost(String id) { + ModelAndView mv = new ModelAndView(); + mv.setViewName("pages/post/selectPost"); + mv.addObject("id",id); + return mv; + } + + // 负责人树形菜单页面 + @GetMapping("/selectConstructionUnit") + public ModelAndView selectConstructionUnit(String id) { + ModelAndView mv = new ModelAndView(); + mv.setViewName("pages/post/selectConstructionUnit"); + mv.addObject("id",id); + return mv; + } + + // 专用于卡片物料树形菜单页面 @GetMapping("/selectMaterialByCard") public ModelAndView selectMaterialByCard(String mname, String type, String clickObj) { diff --git a/src/main/java/com/dreamchaser/depository_manage/mapper/ConstructionUnitMapper.xml b/src/main/java/com/dreamchaser/depository_manage/mapper/ConstructionUnitMapper.xml index 7532bb0d..cd2245f4 100644 --- a/src/main/java/com/dreamchaser/depository_manage/mapper/ConstructionUnitMapper.xml +++ b/src/main/java/com/dreamchaser/depository_manage/mapper/ConstructionUnitMapper.xml @@ -30,6 +30,7 @@ select from constructionunit + where state = 1 +
+ +
+ + +
+
+
+ +
+ + +
+
@@ -203,17 +229,45 @@ class="layui-input" lay-verify="required" style="border-style: none"> + style="margin-top: 10px;display: none" + onclick="scanCodeByOut(this)">
-
+
+ +
+ + +
+
+
+ +
+ + +
+
@@ -229,7 +283,8 @@
- @@ -332,6 +387,16 @@ function scanCodeByOut(obj) { } + // 用于获取施工单位 + function selectConstructionUnit() { + + } + + // 用于获取部门树 + function selectPost() { + + } + // 用于暂存卡片个数 var params = []; @@ -554,11 +619,37 @@
-
+
+ +
+ + +
+
+
+ +
+ + +
+
@@ -571,7 +662,7 @@ // 获取当前高度 var height = parseInt(($("#stepForm").css('height')).split("px")[0]); params.push(NewIdNumber); - $("#stepForm").css("height", height + 422 + 'px'); + $("#stepForm").css("height", height + 483 + 'px'); $("#" + parentId).after(materialItem); }; @@ -590,13 +681,13 @@
+ id=` + "selectGroup" + NewIdNumber + ` onclick="selectGroup(this)">
-
@@ -616,14 +707,40 @@
-
+
+
+ +
+ + +
+
+
+ +
+ + +
-
@@ -635,7 +752,7 @@ // 获取当前高度 var height = parseInt(($("#stepForm2").css('height')).split("px")[0]); params2.push(NewIdNumber); - $("#stepForm2").css("height", height + 289 + 'px'); + $("#stepForm2").css("height", height + 385 + 'px'); $("#" + parentId).after(materialItem); }; @@ -762,7 +879,7 @@ var req = {}; req.code = code; req.type = "out"; - if(code !== ""){ + if (code !== "") { $.ajax({ url: "/material/findMatrialByCode", type: "get", @@ -843,7 +960,7 @@ let gnameItem = gnameParent.childNodes[1].childNodes[1]; let req = {}; req.code = code; - if(code !== ""){ + if (code !== "") { $.ajax({ url: "/group/findGroupByCode", type: "post", @@ -856,7 +973,7 @@ layer.msg(d.statusInfo.detail, { icon: 0, time: 1500 - },function () { + }, function () { obj.value = ''; gidItem.value = ''; gnameItem.value = ''; @@ -928,9 +1045,9 @@ }, end: function () { var mid = materialId.value; - if(mid !== '') { + if (mid !== '') { $.ajax({ - url: "/material/findMatrialById?mid=" + mid+"&type=out", + url: "/material/findMatrialById?mid=" + mid + "&type=out", type: "get", dataType: 'json', contentType: "application/json;charset=utf-8", @@ -987,7 +1104,7 @@ }; // 用于实现点击搜索按钮(组合) - selectGroup = function(obj){ + selectGroup = function (obj) { var parent = obj.parentNode.parentNode.parentNode.parentNode; var parentId = parent.id; @@ -1025,9 +1142,9 @@ content.css('height', '100%'); iframeChildren.css('height', '100%'); }, - end:function () { + end: function () { let gid = gidItem.value; - if(gid !== ''){ + if (gid !== '') { let req = {}; req.gid = gid; $.ajax({ @@ -1042,7 +1159,7 @@ layer.msg(d.statusInfo.detail, { icon: 0, time: 1500 - },function () { + }, function () { obj.value = ''; gidItem.value = ''; gnameItem.value = ''; @@ -1078,7 +1195,7 @@ }; // 用于实现组合名称搜索 - selectGroupByName = function(obj){ + selectGroupByName = function (obj) { let gname = obj.value; var parent = obj.parentNode.parentNode.parentNode.parentNode; // 获取对应元素 @@ -1094,7 +1211,7 @@ // gid let gidItem = gnameParent.childNodes[3]; - if(gname !== ''){ + if (gname !== '') { var req = {}; @@ -1106,12 +1223,12 @@ data: JSON.stringify(req), contentType: "application/json;charset=utf-8", success: function (d) { - if(d.count === -1){ + if (d.count === -1) { // 如果当前组合名称的数量不止一个 layer.msg("请点击右侧搜索确定物品", { icon: 0, time: 1500 - },function () { + }, function () { obj.value = ''; gidItem.value = ''; gcodeItem.value = ''; @@ -1122,12 +1239,12 @@ } } }); - }else if(d.count === 0){ + } else if (d.count === 0) { // 如果当前组合名称不存在 layer.msg("没有该组合,请确认输入是否正确", { icon: 0, time: 1500 - },function () { + }, function () { obj.value = ''; gidItem.value = ''; gcodeItem.value = ''; @@ -1138,7 +1255,7 @@ } } }); - }else{ + } else { // 正常 let data = d.data; let childNodes = parent.childNodes; @@ -1160,8 +1277,7 @@ } } }) - } - else{ + } else { gcodeItem.value = ''; gidItem.value = ''; let childNodes = parent.childNodes; @@ -1191,7 +1307,7 @@ var barCodeItem = barCodeChildren.childNodes[3]; var req = {}; data = data.split(",")[0]; - if(data !== ""){ + if (data !== "") { req.mname = data; $.ajax({ url: "/material/findInventoryByCondition", @@ -1218,7 +1334,7 @@ unit.empty(); $("#unit" + idNumber).append(new Option(material.baseUnit, "-1")); var unitList = material["splitInfoList"]; - if(unitList !== null && unitList != undefined){ + if (unitList !== null && unitList != undefined) { for (let i = 0; i < unitList.length; i++) { $("#unit" + idNumber).append(new Option(unitList[i].newUnit, unitList[i].newUnit)); } @@ -1266,10 +1382,9 @@ scanBarCode = function (obj) { let wxScan = parent; - if(wxScan.wx === undefined){ + if (wxScan.wx === undefined) { wxScan = wxScan.parent.wx; - } - else{ + } else { wxScan = wxScan.wx; } wxScan.scanQRCode({ @@ -1342,16 +1457,15 @@ scanCodeByOut = function (obj) { let wxScan = parent; - if(wxScan.wx === undefined){ + if (wxScan.wx === undefined) { wxScan = wxScan.parent.wx; - } - else{ + } else { wxScan = wxScan.wx; } wxScan.scanQRCode({ desc: 'scanQRCode desc', needResult: 1, // 默认为0,扫描结果由企业微信处理,1则直接返回扫描结果, - scanType: ["qrCode","barCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 + scanType: ["qrCode", "barCode"], // 可以指定扫二维码还是条形码(一维码),默认二者都有 success: function (res) { // 回调 var result = res.resultStr;//当needResult为1时返回处理结果 @@ -1446,7 +1560,7 @@ MaterialQuantityIsTrue = function (obj) { var id = obj.id.split("quantity")[1]; var mcode = $("#code" + id).val(); // 获取到当前输入的物料编码 - var unit = $("#unit"+id).val(); + var unit = $("#unit" + id).val(); if (mcode === "" || mcode === undefined || mcode === null) { layer.msg("请输入物料的正确编码!", {icon: 0, time: 500}, function () { $("#quantity" + id).val("") @@ -1503,7 +1617,10 @@ var flag = res.data; if (!flag) { // 如果当前数目不合适 - layer.msg("当前组合中"+res.statusInfo.message+"的库存数量不足", {icon: 0, time: 1000}, function () { + layer.msg("当前组合中" + res.statusInfo.message + "的库存数量不足", { + icon: 0, + time: 1000 + }, function () { $("#quantityForGroup" + id).val(""); }); @@ -1512,6 +1629,50 @@ }); } } + }; + + selectPost = function (obj) { + let id = obj.id; + layer.open({ + type: 2, + title: '弹窗内容', + skin: 'layui-layer-rim', + maxmin: true, + shadeClose: true, //点击遮罩关闭层 + area: ['70%', '70%'], + content: '/selectPost?id=' + id, + move: '.layui-layer-title', + fixed: false, + success: function (layero, index) { + var children = layero.children(); + var content = $(children[1]); + var iframeChildren = $(content.children()); + content.css('height', '100%'); + iframeChildren.css('height', '100%'); + } + }); + }; + + selectConstructionUnit = function (obj) { + let id = obj.id; + layer.open({ + type: 2, + title: '弹窗内容', + skin: 'layui-layer-rim', + maxmin: true, + shadeClose: true, //点击遮罩关闭层 + area: ['70%', '70%'], + content: '/selectConstructionUnit?id=' + id, + move: '.layui-layer-title', + fixed: false, + success: function (layero, index) { + var children = layero.children(); + var content = $(children[1]); + var iframeChildren = $(content.children()); + content.css('height', '100%'); + iframeChildren.css('height', '100%'); + } + }); } diff --git a/src/main/resources/templates/pages/post/selectConstructionUnit.html b/src/main/resources/templates/pages/post/selectConstructionUnit.html new file mode 100644 index 00000000..4a3a1ba3 --- /dev/null +++ b/src/main/resources/templates/pages/post/selectConstructionUnit.html @@ -0,0 +1,56 @@ + + + + + layui + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/src/main/resources/templates/pages/post/selectManager.html b/src/main/resources/templates/pages/post/selectManager.html index 31d748b0..b375ad52 100644 --- a/src/main/resources/templates/pages/post/selectManager.html +++ b/src/main/resources/templates/pages/post/selectManager.html @@ -41,7 +41,7 @@ } }); $.ajax({ - url: "/company/treeMenus", + url: "/company/managerTreeMenus", type: 'get', dataType: 'json', contentType: "application/json;charset=utf-8", diff --git a/src/main/resources/templates/pages/post/selectPost.html b/src/main/resources/templates/pages/post/selectPost.html new file mode 100644 index 00000000..5a1a879a --- /dev/null +++ b/src/main/resources/templates/pages/post/selectPost.html @@ -0,0 +1,57 @@ + + + + + layui + + + + + + + + +
+ + + + \ No newline at end of file diff --git a/src/test/java/com/dreamchaser/depository_manage/TestForOther.java b/src/test/java/com/dreamchaser/depository_manage/TestForOther.java index 3bfaa281..777b5bae 100644 --- a/src/test/java/com/dreamchaser/depository_manage/TestForOther.java +++ b/src/test/java/com/dreamchaser/depository_manage/TestForOther.java @@ -1,8 +1,12 @@ package com.dreamchaser.depository_manage; +import com.alibaba.fastjson.JSONArray; +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.JSONPObject; import com.dreamchaser.depository_manage.entity.Depository; import com.dreamchaser.depository_manage.entity.MaterialType; import com.dreamchaser.depository_manage.entity.Place; +import com.dreamchaser.depository_manage.entity.UserByPort; import com.dreamchaser.depository_manage.mapper.DepositoryMapper; import com.dreamchaser.depository_manage.pojo.RestResponse; import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo; @@ -13,6 +17,7 @@ import com.dreamchaser.depository_manage.service.DepositoryService; import com.dreamchaser.depository_manage.service.PlaceService; import com.dreamchaser.depository_manage.service.StockTakingService; import com.dreamchaser.depository_manage.utils.CreateQrCodeUtil; +import com.dreamchaser.depository_manage.utils.LinkInterfaceUtil; import com.dreamchaser.depository_manage.utils.ZipMultiFileUtil; import org.junit.Test; import org.junit.runner.RunWith; @@ -23,10 +28,8 @@ import org.springframework.test.context.junit4.SpringRunner; import java.io.File; import java.io.IOException; -import java.util.ArrayList; -import java.util.Iterator; -import java.util.List; -import java.util.Set; +import java.util.*; +import java.util.concurrent.*; @RunWith(SpringRunner.class) @SpringBootTest @@ -36,7 +39,116 @@ public class TestForOther { @Test public void run() { + UserByPort userByPort = LinkInterfaceUtil.FindUserById(78, null); + List list = buildPostTree(userByPort); + System.out.println(JSONObject.toJSONString(list)); + } + + /** + * 用于构造当前用户可见的部门树 + * @param userByPort 当前用户 + * @return + */ + public List buildPostTree(UserByPort userByPort){ + JSONArray postTree = LinkInterfaceUtil.getPostTree(userByPort); + // 定义线程数量 + int threadSize = postTree.size(); + // 开启对应数量的线程 + ExecutorService exs = Executors.newFixedThreadPool(threadSize); + // 树结构结果集 + List list = new ArrayList<>(); + // 线程结果集 + List> futureList = new ArrayList>(); + + // 1.定义CompletionService + CompletionService completionService = new ExecutorCompletionService(exs); + for (Object o : postTree) { + JSONObject data = (JSONObject) o; + // 创建一个线程 + Future submit = completionService.submit(new PostTreeThreads(data)); + futureList.add(submit); + } + for (int i = 0; i < threadSize; i++) { + Object result = null; + try { + result = completionService.take().get(); + } catch (InterruptedException e) { + e.printStackTrace(); + } catch (ExecutionException e) { + e.printStackTrace(); + } + list.add( result); + } + return list; + } + + class PostTreeThreads implements Callable{ + + private JSONObject jsonObject; + + public PostTreeThreads(JSONObject jsonObject) { + this.jsonObject = jsonObject; + } + + @Override + public Object call() throws Exception { + // 定义结果 + Map result = new HashMap<>(); + // 获取当前的子类 + if (jsonObject.containsKey("child") && jsonObject.get("child") != null) { + // 如果存在子类 + List list = buildChildNodes(jsonObject); + result = buildTree(jsonObject, list); + }else{ + // 如果不存在子类 + result = buildTree(jsonObject, null); + } + return result; + } + } + + + /** + * 用于构造子节点 + * @param jsonObject 待构造父节点 + * @return + */ + public List buildChildNodes (JSONObject jsonObject){ + List result = new ArrayList<>(); + // 获取当前节点的子节点 + JSONArray child = jsonObject.getJSONArray("child"); + for (Object o:child + ) { + JSONObject data = (JSONObject) o; + if(data.containsKey("child") && data.get("child") != null){ + // 如果该节点存在子节点 + List list = buildChildNodes(data); + result.add(buildTree(data,list)); + }else{ + // 如果不存在子节点 + result.add(buildTree(data,null)); + } + } + return result; + } + + + /** + * 用于构造节点 + * @param jsonObject 待构造节点数据 + * @param children 当前节点子节点 + * @return + */ + public Map buildTree(JSONObject jsonObject,List children){ + Map node = new HashMap<>(); + node.put("id",jsonObject.getInteger("id")); + node.put("title",jsonObject.getString("name")); + node.put("children",children); + node.put("wechatorganizationid",jsonObject.getInteger("wechatorganizationid")); + return node; } + + } diff --git a/target/classes/templates/pages/post/selectManager.html b/target/classes/templates/pages/post/selectManager.html index 31d748b0..b375ad52 100644 --- a/target/classes/templates/pages/post/selectManager.html +++ b/target/classes/templates/pages/post/selectManager.html @@ -41,7 +41,7 @@ } }); $.ajax({ - url: "/company/treeMenus", + url: "/company/managerTreeMenus", type: 'get', dataType: 'json', contentType: "application/json;charset=utf-8",