Browse Source

添加部门、施工单位树与选择功能

lwx_dev
erdanergou 3 years ago
parent
commit
91fb9b7397
  1. 35
      src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java
  2. 20
      src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
  3. 1
      src/main/java/com/dreamchaser/depository_manage/mapper/ConstructionUnitMapper.xml
  4. 16
      src/main/java/com/dreamchaser/depository_manage/service/CompanyService.java
  5. 144
      src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java
  6. 8
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialTypeServiceImpl.java
  7. 33
      src/main/java/com/dreamchaser/depository_manage/utils/LinkInterfaceUtil.java
  8. 185
      src/main/resources/templates/pages/applicationForStorageCenter/application-out.html
  9. 56
      src/main/resources/templates/pages/post/selectConstructionUnit.html
  10. 2
      src/main/resources/templates/pages/post/selectManager.html
  11. 57
      src/main/resources/templates/pages/post/selectPost.html
  12. 120
      src/test/java/com/dreamchaser/depository_manage/TestForOther.java
  13. 2
      target/classes/templates/pages/post/selectManager.html

35
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<Object> 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<Object> 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<Object> list = new ArrayList<>();
list = companyService.buildConstructionUnitTree();
return new RestResponse(list);
}
/**
* 用于获取企业微信通讯录下的结构

20
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) {

1
src/main/java/com/dreamchaser/depository_manage/mapper/ConstructionUnitMapper.xml

@ -30,6 +30,7 @@
select
<include refid="allColumns"/>
from constructionunit
where state = 1
</select>
<select id="findConstructionUnitByCondition" parameterType="map" resultMap="constructionUnitMap">

16
src/main/java/com/dreamchaser/depository_manage/service/CompanyService.java

@ -93,7 +93,21 @@ public interface CompanyService {
* 用于构造部门负责人树
* @return
*/
List<Object> InitTreeMenus(UserByPort userToken);
List<Object> InitTreeMenusForHearder(UserByPort userToken);
/**
* 用于构造当前用户可见的部门树
* @param userByPort 当前用户
* @return
*/
List<Object> buildPostTree(UserByPort userByPort);
/**
* 用于构造当前施工单位树
* @return
*/
List<Object> buildConstructionUnitTree();
/**

144
src/main/java/com/dreamchaser/depository_manage/service/impl/CompanyServiceImpl.java

@ -7,11 +7,13 @@ import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.config.QyWxConfig;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.mapper.CompanyMapper;
import com.dreamchaser.depository_manage.mapper.ConstructionUnitMapper;
import com.dreamchaser.depository_manage.pojo.AdministrationP;
import com.dreamchaser.depository_manage.pojo.PostP;
import com.dreamchaser.depository_manage.pojo.RoleAndDepository;
import com.dreamchaser.depository_manage.service.CompanyService;
import com.dreamchaser.depository_manage.utils.HttpUtils;
import com.dreamchaser.depository_manage.utils.LinkInterfaceUtil;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import org.apache.http.protocol.HTTP;
import org.apache.xmlbeans.impl.xb.xsdschema.Public;
@ -28,6 +30,9 @@ public class CompanyServiceImpl implements CompanyService {
@Autowired
CompanyMapper companyMapper;
@Autowired
ConstructionUnitMapper constructionUnitMapper;
/**
* 查询所有公司
* @return
@ -150,7 +155,7 @@ public class CompanyServiceImpl implements CompanyService {
* @return
*/
@Override
public List<Object> InitTreeMenus(UserByPort userToken) {
public List<Object> InitTreeMenusForHearder(UserByPort userToken) {
Integer company = userToken.getCompany();
List<ThreeAboutMan> allUserByAdministration = findAllUserByAdministration(company.toString(), userToken);
// 开启对应数量的线程
@ -252,6 +257,143 @@ public class CompanyServiceImpl implements CompanyService {
}
return list;
}
/**
* 用于构造当前用户可见的部门树
* @param userByPort 当前用户
* @return
*/
public List<Object> buildPostTree(UserByPort userByPort){
JSONArray postTree = LinkInterfaceUtil.getPostTree(userByPort);
// 定义线程数量
int threadSize = postTree.size();
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize);
// 树结构结果集
List<Object> list = new ArrayList<>();
// 线程结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
for (Object o : postTree) {
JSONObject data = (JSONObject) o;
// 创建一个线程
Future<Object> 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;
}
/**
* 用于构造当前施工单位树
* @return
*/
@Override
public List<Object> buildConstructionUnitTree() {
List<Object> result = new ArrayList<>();
List<ConstructionUnit> constructionUnitAll = constructionUnitMapper.findConstructionUnitAll();
for (ConstructionUnit constructionUnit:constructionUnitAll
) {
result.add(buildTree(constructionUnit));
}
return result;
}
class PostTreeThreads implements Callable<Object>{
private JSONObject jsonObject;
public PostTreeThreads(JSONObject jsonObject) {
this.jsonObject = jsonObject;
}
@Override
public Object call() throws Exception {
// 定义结果
Map<String,Object> result = new HashMap<>();
// 获取当前的子类
if (jsonObject.containsKey("child") && jsonObject.get("child") != null) {
// 如果存在子类
List<Object> list = buildChildNodes(jsonObject);
result = buildTree(jsonObject, list);
}else{
// 如果不存在子类
result = buildTree(jsonObject, null);
}
return result;
}
}
/**
* 用于构造子节点
* @param jsonObject 待构造父节点
* @return
*/
public List<Object> buildChildNodes (JSONObject jsonObject){
List<Object> 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<Object> list = buildChildNodes(data);
result.add(buildTree(data,list));
}else{
// 如果不存在子节点
result.add(buildTree(data,null));
}
}
return result;
}
/**
* 用于构造节点
* @param jsonObject 待构造节点数据
* @param children 当前节点子节点
* @return
*/
public Map<String,Object> buildTree(JSONObject jsonObject,List<Object> children){
Map<String,Object> 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;
}
/**
* 用于构造施工单位节点
* @param constructionUnit 待构造节点数据
* @return
*/
public Map<String,Object> buildTree(ConstructionUnit constructionUnit){
Map<String,Object> node = new HashMap<>();
node.put("id",constructionUnit.getId());
node.put("title",constructionUnit.getName());
return node;
}
/**
* 用于构造树形模板
*

8
src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialTypeServiceImpl.java

@ -209,15 +209,13 @@ public class MaterialTypeServiceImpl implements MaterialTypeService {
// 获取所有物料类型
List<MaterialType> materialTypeAll = materialTypeMapper.findMaterialTypeAll();
// 物料总数
Integer totalVal = materialTypeAll.size();
int totalVal = materialTypeAll.size();
// 定义分页数量
double size = 100.0;
// 定义线程数
Integer threadSize = (int) Math.ceil(totalVal / size);
int threadSize = (int) Math.ceil(totalVal / size);
// 定义开启线程数
Integer openThreadSize = 0;
int openThreadSize = 0;
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize);
// 树结构结果集

33
src/main/java/com/dreamchaser/depository_manage/utils/LinkInterfaceUtil.java

@ -45,8 +45,8 @@ public class LinkInterfaceUtil {
if (list == null) {
list = new JSONArray();
}
for (int i = 0; i < list.size(); i++) {
UserByPort userByPort = JSONObject.toJavaObject((JSONObject) list.get(i), UserByPort.class);
for (Object o : list) {
UserByPort userByPort = JSONObject.toJavaObject((JSONObject) o, UserByPort.class);
result.add(userByPort);
}
return result;
@ -261,12 +261,37 @@ public class LinkInterfaceUtil {
if(list == null){
list = new JSONArray();
}
for (int i = 0; i < list.size(); i++) {
UserByPort userByPort = JSONObject.toJavaObject((JSONObject) list.get(i), UserByPort.class);
for (Object o : list) {
UserByPort userByPort = JSONObject.toJavaObject((JSONObject) o, UserByPort.class);
if (userByPort.getPersonincharge() == 1) {
DepartmentHeads.add(userByPort);
}
}
return DepartmentHeads;
}
/**
* 用于获取行政组织树
* @param userByPort
* @return
*/
public static JSONArray getPostTree(UserByPort userByPort){
String url = PortConfig.external_url + "/org/govthreeing";
Map<String,Object> param = new HashMap<>();
param.put("id",userByPort.getCompany());
param.put("idstr","");
param.put("level",0);
param.put("all",1);
String jsonString = JSONObject.toJSONString(param);
JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null;
try {
post = HttpUtils.send(url, paramObject, HTTP.UTF_8,userByPort);
} catch (IOException e) {
e.printStackTrace();
}
JSONObject jsonObject = JSONObject.parseObject(post);
return (JSONArray) jsonObject.get("data");
}
}

185
src/main/resources/templates/pages/applicationForStorageCenter/application-out.html

@ -126,6 +126,32 @@
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">部门:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择部门" class="layui-input"
readonly
id="openCompanyAdminorg"
onclick="selectPost(this)"
lay-verify="required"/>
<input type="text" name="adminorg" class="layui-input"
id="adminorgId"
style="display: none"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">施工单位:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择施工单位" class="layui-input"
readonly
id="openConstructionUnit"
onclick="selectConstructionUnit(this)"
lay-verify="required"/>
<input type="text" name="constructionUnitId" class="layui-input"
id="constructionUnitId"
style="display: none"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
@ -203,17 +229,45 @@
class="layui-input" lay-verify="required"
style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16"
style="margin-top: 10px;display: none" onclick="scanCodeByOut(this)">
style="margin-top: 10px;display: none"
onclick="scanCodeByOut(this)">
</div>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">组合数量:</label>
<div class="layui-input-block">
<input type="number" name="quantity" class="layui-input" id="quantityForGroup" onblur="groupQuantityIsTrue(this)"
<input type="number" name="quantity" class="layui-input"
id="quantityForGroup" onblur="groupQuantityIsTrue(this)"
required lay-verify="number" placeholder="请填写组合数量"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">部门:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择部门" class="layui-input"
readonly
id="openCompanyAdminorgForGroup"
onclick="selectPost(this)"
lay-verify="required"/>
<input type="text" name="adminorg" class="layui-input"
id="adminorgIdForGroup"
style="display: none"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">施工单位:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择施工单位" class="layui-input"
readonly
id="openConstructionUnitForGroup"
onclick="selectConstructionUnit(this)"
lay-verify="required"/>
<input type="text" name="constructionUnitId" class="layui-input"
id="constructionUnitIdForGroup"
style="display: none"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
@ -229,7 +283,8 @@
<!--提交按钮-->
<div class="layui-form-item" id="btn_sub2">
<div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formStep2" type="button"
<button class="layui-btn" lay-submit lay-filter="formStep2"
type="button"
style="margin-bottom: 30px;margin-left: 15%">
&emsp;提交&emsp;
</button>
@ -332,6 +387,16 @@
function scanCodeByOut(obj) {
}
// 用于获取施工单位
function selectConstructionUnit() {
}
// 用于获取部门树
function selectPost() {
}
// 用于暂存卡片个数
var params = [];
@ -559,6 +624,32 @@
</select>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">部门:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择部门" class="layui-input"
readonly
id=`+"openCompanyAdminorg"+NewIdNumber+`
onclick="selectPost(this)"
lay-verify="required"/>
<input type="text" name=`+"adminorg"+NewIdNumber+` class="layui-input"
id=`+"adminorgId"+NewIdNumber+`
style="display: none"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">施工单位:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择施工单位" class="layui-input"
readonly
id=`+"openConstructionUnit"+NewIdNumber+`
onclick="selectConstructionUnit(this)"
lay-verify="required"/>
<input type="text" name=`+"constructionUnitId"+NewIdNumber+` class="layui-input"
id=`+"constructionUnitId"+NewIdNumber+`
style="display: none"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
<div class="layui-input-block">
@ -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);
};
@ -619,6 +710,32 @@
<input type="number" name=` + "quantity" + NewIdNumber + ` class="layui-input" id=` + "quantityForGroup" + NewIdNumber + `
required lay-verify="number" onblur="groupQuantityIsTrue(this)" placeholder="请填写组合数量"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">部门:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择部门" class="layui-input"
readonly
id=`+"openCompanyAdminorgForGroup"+NewIdNumber+`
onclick="selectPost(this)"
lay-verify="required"/>
<input type="text" name=`+"adminorg"+NewIdNumber+` class="layui-input"
id=`+"adminorgIdForGroup"+NewIdNumber+`
style="display: none"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">施工单位:</label>
<div class="layui-input-block">
<input type="text" placeholder="请选择施工单位" class="layui-input"
readonly
id=`+"openConstructionUnitForGroup"+NewIdNumber+`
onclick="selectConstructionUnit(this)"
lay-verify="required"/>
<input type="text" name=`+"constructionUnitId"+NewIdNumber+` class="layui-input"
id=`+"constructionUnitIdForGroup"+NewIdNumber+`
style="display: none"/>
</div>
</div>
<div class="layui-form-item">
<label class="layui-form-label">备注说明:</label>
@ -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);
};
@ -1160,8 +1277,7 @@
}
}
})
}
else{
} else {
gcodeItem.value = '';
gidItem.value = '';
let childNodes = parent.childNodes;
@ -1268,8 +1384,7 @@
if (wxScan.wx === undefined) {
wxScan = wxScan.parent.wx;
}
else{
} else {
wxScan = wxScan.wx;
}
wxScan.scanQRCode({
@ -1344,8 +1459,7 @@
if (wxScan.wx === undefined) {
wxScan = wxScan.parent.wx;
}
else{
} else {
wxScan = wxScan.wx;
}
wxScan.scanQRCode({
@ -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%');
}
});
}

56
src/main/resources/templates/pages/post/selectConstructionUnit.html

@ -0,0 +1,56 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>layui</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="/static/lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/public.css" media="all">
</head>
<body>
<input id="id" style="display:none;" th:value="${id}">
<div id="test2" class="demo-tree"></div>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script>
var data;
layui.use(['form', 'layer', 'dropdown', 'tree'], function () {
var $ = layui.jquery,
tree = layui.tree,
test = tree.render({
elem: '#test2'
, data: []
, onlyIconControl: false //是否仅允许节点左侧图标控制展开收缩
, click: function (obj) {
var data = obj.data;
let id = $("#id").val();
let idNumber = id.replace(/[^\d]/g, "");
if (id.indexOf("Group") !== -1) {
$("#openConstructionUnitForGroup"+idNumber, window.parent.document).val(data.title);
$("#constructionUnitIdForGroup"+idNumber, window.parent.document).val(data.id);
} else {
$("#openConstructionUnit"+idNumber, window.parent.document).val(data.title);
$("#constructionUnitId"+idNumber, window.parent.document).val(data.id);
}
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
}
});
$.ajax({
url: "/company/constructionUnitTree",
type: 'get',
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (d) {
var data2 = d.data;
test.reload({
data: data2
});
}
});
})
</script>
</body>
</html>

2
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",

57
src/main/resources/templates/pages/post/selectPost.html

@ -0,0 +1,57 @@
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="utf-8">
<title>layui</title>
<meta name="renderer" content="webkit">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<link rel="stylesheet" href="/static/lib/layui-v2.6.3/css/layui.css" media="all">
<link rel="stylesheet" href="/static/css/public.css" media="all">
</head>
<body>
<input id="id" style="display:none;" th:value="${id}">
<div id="test2" class="demo-tree"></div>
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script>
var data;
layui.use(['form', 'layer', 'dropdown', 'tree'], function () {
var $ = layui.jquery,
tree = layui.tree,
test = tree.render({
elem: '#test2'
, data: []
, onlyIconControl: false //是否仅允许节点左侧图标控制展开收缩
, click: function (obj) {
var data = obj.data;
let id = $("#id").val();
let idNumber = id.replace(/[^\d]/g, "");
if (id.indexOf("Group") !== -1) {
$("#adminorgIdForGroup"+idNumber, window.parent.document).val(data.id);
$("#openCompanyAdminorgForGroup"+idNumber, window.parent.document).val(data.title);
}else{
$("#adminorgId"+idNumber, window.parent.document).val(data.id);
$("#openCompanyAdminorg"+idNumber, window.parent.document).val(data.title);
}
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
}
});
$.ajax({
url: "/company/postTreeMenus",
type: 'get',
dataType: 'json',
contentType: "application/json;charset=utf-8",
success: function (d) {
var data2 = d.data;
test.reload({
data: data2
});
}
});
})
</script>
</body>
</html>

120
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<Object> list = buildPostTree(userByPort);
System.out.println(JSONObject.toJSONString(list));
}
/**
* 用于构造当前用户可见的部门树
* @param userByPort 当前用户
* @return
*/
public List<Object> buildPostTree(UserByPort userByPort){
JSONArray postTree = LinkInterfaceUtil.getPostTree(userByPort);
// 定义线程数量
int threadSize = postTree.size();
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize);
// 树结构结果集
List<Object> list = new ArrayList<>();
// 线程结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
for (Object o : postTree) {
JSONObject data = (JSONObject) o;
// 创建一个线程
Future<Object> 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<Object>{
private JSONObject jsonObject;
public PostTreeThreads(JSONObject jsonObject) {
this.jsonObject = jsonObject;
}
@Override
public Object call() throws Exception {
// 定义结果
Map<String,Object> result = new HashMap<>();
// 获取当前的子类
if (jsonObject.containsKey("child") && jsonObject.get("child") != null) {
// 如果存在子类
List<Object> list = buildChildNodes(jsonObject);
result = buildTree(jsonObject, list);
}else{
// 如果不存在子类
result = buildTree(jsonObject, null);
}
return result;
}
}
/**
* 用于构造子节点
* @param jsonObject 待构造父节点
* @return
*/
public List<Object> buildChildNodes (JSONObject jsonObject){
List<Object> 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<Object> list = buildChildNodes(data);
result.add(buildTree(data,list));
}else{
// 如果不存在子节点
result.add(buildTree(data,null));
}
}
return result;
}
/**
* 用于构造节点
* @param jsonObject 待构造节点数据
* @param children 当前节点子节点
* @return
*/
public Map<String,Object> buildTree(JSONObject jsonObject,List<Object> children){
Map<String,Object> 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;
}
}

2
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",

Loading…
Cancel
Save