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 * @param request
* @return * @return
*/ */
@GetMapping("/treeMenus") @GetMapping("/managerTreeMenus")
public RestResponse InitTreeMenus(HttpServletRequest request) { public RestResponse InitTreeMenus(HttpServletRequest request) {
List<Object> list = new ArrayList<>(); List<Object> list = new ArrayList<>();
String token = request.getHeader("user-token"); String token = request.getHeader("user-token");
@ -367,10 +367,41 @@ public class CompanyController {
token = (String) request.getSession().getAttribute("userToken"); token = (String) request.getSession().getAttribute("userToken");
} }
UserByPort userToken = AuthenticationTokenPool.getUserToken(token); UserByPort userToken = AuthenticationTokenPool.getUserToken(token);
list = companyService.InitTreeMenus(userToken); list = companyService.InitTreeMenusForHearder(userToken);
return new RestResponse(list); 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; 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") @GetMapping("/selectMaterialByCard")
public ModelAndView selectMaterialByCard(String mname, String type, String clickObj) { 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 select
<include refid="allColumns"/> <include refid="allColumns"/>
from constructionunit from constructionunit
where state = 1
</select> </select>
<select id="findConstructionUnitByCondition" parameterType="map" resultMap="constructionUnitMap"> <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 * @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.config.QyWxConfig;
import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.mapper.CompanyMapper; 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.AdministrationP;
import com.dreamchaser.depository_manage.pojo.PostP; import com.dreamchaser.depository_manage.pojo.PostP;
import com.dreamchaser.depository_manage.pojo.RoleAndDepository; import com.dreamchaser.depository_manage.pojo.RoleAndDepository;
import com.dreamchaser.depository_manage.service.CompanyService; import com.dreamchaser.depository_manage.service.CompanyService;
import com.dreamchaser.depository_manage.utils.HttpUtils; import com.dreamchaser.depository_manage.utils.HttpUtils;
import com.dreamchaser.depository_manage.utils.LinkInterfaceUtil;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil; import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import org.apache.http.protocol.HTTP; import org.apache.http.protocol.HTTP;
import org.apache.xmlbeans.impl.xb.xsdschema.Public; import org.apache.xmlbeans.impl.xb.xsdschema.Public;
@ -28,6 +30,9 @@ public class CompanyServiceImpl implements CompanyService {
@Autowired @Autowired
CompanyMapper companyMapper; CompanyMapper companyMapper;
@Autowired
ConstructionUnitMapper constructionUnitMapper;
/** /**
* 查询所有公司 * 查询所有公司
* @return * @return
@ -150,7 +155,7 @@ public class CompanyServiceImpl implements CompanyService {
* @return * @return
*/ */
@Override @Override
public List<Object> InitTreeMenus(UserByPort userToken) { public List<Object> InitTreeMenusForHearder(UserByPort userToken) {
Integer company = userToken.getCompany(); Integer company = userToken.getCompany();
List<ThreeAboutMan> allUserByAdministration = findAllUserByAdministration(company.toString(), userToken); List<ThreeAboutMan> allUserByAdministration = findAllUserByAdministration(company.toString(), userToken);
// 开启对应数量的线程 // 开启对应数量的线程
@ -252,6 +257,143 @@ public class CompanyServiceImpl implements CompanyService {
} }
return list; 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(); List<MaterialType> materialTypeAll = materialTypeMapper.findMaterialTypeAll();
// 物料总数 // 物料总数
Integer totalVal = materialTypeAll.size(); int totalVal = materialTypeAll.size();
// 定义分页数量 // 定义分页数量
double size = 100.0; 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); 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) { if (list == null) {
list = new JSONArray(); list = new JSONArray();
} }
for (int i = 0; i < list.size(); i++) { for (Object o : list) {
UserByPort userByPort = JSONObject.toJavaObject((JSONObject) list.get(i), UserByPort.class); UserByPort userByPort = JSONObject.toJavaObject((JSONObject) o, UserByPort.class);
result.add(userByPort); result.add(userByPort);
} }
return result; return result;
@ -261,12 +261,37 @@ public class LinkInterfaceUtil {
if(list == null){ if(list == null){
list = new JSONArray(); list = new JSONArray();
} }
for (int i = 0; i < list.size(); i++) { for (Object o : list) {
UserByPort userByPort = JSONObject.toJavaObject((JSONObject) list.get(i), UserByPort.class); UserByPort userByPort = JSONObject.toJavaObject((JSONObject) o, UserByPort.class);
if (userByPort.getPersonincharge() == 1) { if (userByPort.getPersonincharge() == 1) {
DepartmentHeads.add(userByPort); DepartmentHeads.add(userByPort);
} }
} }
return DepartmentHeads; 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> </select>
</div> </div>
</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"> <div class="layui-form-item">
<label class="layui-form-label">备注说明:</label> <label class="layui-form-label">备注说明:</label>
<div class="layui-input-block"> <div class="layui-input-block">
@ -203,17 +229,45 @@
class="layui-input" lay-verify="required" class="layui-input" lay-verify="required"
style="border-style: none"> style="border-style: none">
<img src="/static/images/search.ico" height="16" width="16" <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>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">组合数量:</label> <label class="layui-form-label">组合数量:</label>
<div class="layui-input-block"> <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="请填写组合数量"/> required lay-verify="number" placeholder="请填写组合数量"/>
</div> </div>
</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"> <div class="layui-form-item">
<label class="layui-form-label">备注说明:</label> <label class="layui-form-label">备注说明:</label>
<div class="layui-input-block"> <div class="layui-input-block">
@ -229,7 +283,8 @@
<!--提交按钮--> <!--提交按钮-->
<div class="layui-form-item" id="btn_sub2"> <div class="layui-form-item" id="btn_sub2">
<div class="layui-input-block"> <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%"> style="margin-bottom: 30px;margin-left: 15%">
&emsp;提交&emsp; &emsp;提交&emsp;
</button> </button>
@ -332,6 +387,16 @@
function scanCodeByOut(obj) { function scanCodeByOut(obj) {
} }
// 用于获取施工单位
function selectConstructionUnit() {
}
// 用于获取部门树
function selectPost() {
}
// 用于暂存卡片个数 // 用于暂存卡片个数
var params = []; var params = [];
@ -559,6 +624,32 @@
</select> </select>
</div> </div>
</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"> <div class="layui-form-item">
<label class="layui-form-label">备注说明:</label> <label class="layui-form-label">备注说明:</label>
<div class="layui-input-block"> <div class="layui-input-block">
@ -571,7 +662,7 @@
// 获取当前高度 // 获取当前高度
var height = parseInt(($("#stepForm").css('height')).split("px")[0]); var height = parseInt(($("#stepForm").css('height')).split("px")[0]);
params.push(NewIdNumber); params.push(NewIdNumber);
$("#stepForm").css("height", height + 422 + 'px'); $("#stepForm").css("height", height + 483 + 'px');
$("#" + parentId).after(materialItem); $("#" + parentId).after(materialItem);
}; };
@ -619,6 +710,32 @@
<input type="number" name=` + "quantity" + NewIdNumber + ` class="layui-input" id=` + "quantityForGroup" + NewIdNumber + ` <input type="number" name=` + "quantity" + NewIdNumber + ` class="layui-input" id=` + "quantityForGroup" + NewIdNumber + `
required lay-verify="number" onblur="groupQuantityIsTrue(this)" placeholder="请填写组合数量"/> required lay-verify="number" onblur="groupQuantityIsTrue(this)" placeholder="请填写组合数量"/>
</div> </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>
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">备注说明:</label> <label class="layui-form-label">备注说明:</label>
@ -635,7 +752,7 @@
// 获取当前高度 // 获取当前高度
var height = parseInt(($("#stepForm2").css('height')).split("px")[0]); var height = parseInt(($("#stepForm2").css('height')).split("px")[0]);
params2.push(NewIdNumber); params2.push(NewIdNumber);
$("#stepForm2").css("height", height + 289 + 'px'); $("#stepForm2").css("height", height + 385 + 'px');
$("#" + parentId).after(materialItem); $("#" + parentId).after(materialItem);
}; };
@ -1160,8 +1277,7 @@
} }
} }
}) })
} } else {
else{
gcodeItem.value = ''; gcodeItem.value = '';
gidItem.value = ''; gidItem.value = '';
let childNodes = parent.childNodes; let childNodes = parent.childNodes;
@ -1268,8 +1384,7 @@
if (wxScan.wx === undefined) { if (wxScan.wx === undefined) {
wxScan = wxScan.parent.wx; wxScan = wxScan.parent.wx;
} } else {
else{
wxScan = wxScan.wx; wxScan = wxScan.wx;
} }
wxScan.scanQRCode({ wxScan.scanQRCode({
@ -1344,8 +1459,7 @@
if (wxScan.wx === undefined) { if (wxScan.wx === undefined) {
wxScan = wxScan.parent.wx; wxScan = wxScan.parent.wx;
} } else {
else{
wxScan = wxScan.wx; wxScan = wxScan.wx;
} }
wxScan.scanQRCode({ wxScan.scanQRCode({
@ -1503,7 +1617,10 @@
var flag = res.data; var flag = res.data;
if (!flag) { // 如果当前数目不合适 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(""); $("#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({ $.ajax({
url: "/company/treeMenus", url: "/company/managerTreeMenus",
type: 'get', type: 'get',
dataType: 'json', dataType: 'json',
contentType: "application/json;charset=utf-8", 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; 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.Depository;
import com.dreamchaser.depository_manage.entity.MaterialType; import com.dreamchaser.depository_manage.entity.MaterialType;
import com.dreamchaser.depository_manage.entity.Place; 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.mapper.DepositoryMapper;
import com.dreamchaser.depository_manage.pojo.RestResponse; import com.dreamchaser.depository_manage.pojo.RestResponse;
import com.dreamchaser.depository_manage.pojo.callBackXml.approvalCallBackXml.ApprovalInfo; 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.PlaceService;
import com.dreamchaser.depository_manage.service.StockTakingService; import com.dreamchaser.depository_manage.service.StockTakingService;
import com.dreamchaser.depository_manage.utils.CreateQrCodeUtil; import com.dreamchaser.depository_manage.utils.CreateQrCodeUtil;
import com.dreamchaser.depository_manage.utils.LinkInterfaceUtil;
import com.dreamchaser.depository_manage.utils.ZipMultiFileUtil; import com.dreamchaser.depository_manage.utils.ZipMultiFileUtil;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@ -23,10 +28,8 @@ import org.springframework.test.context.junit4.SpringRunner;
import java.io.File; import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.*;
import java.util.Iterator; import java.util.concurrent.*;
import java.util.List;
import java.util.Set;
@RunWith(SpringRunner.class) @RunWith(SpringRunner.class)
@SpringBootTest @SpringBootTest
@ -36,7 +39,116 @@ public class TestForOther {
@Test @Test
public void run() { 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({ $.ajax({
url: "/company/treeMenus", url: "/company/managerTreeMenus",
type: 'get', type: 'get',
dataType: 'json', dataType: 'json',
contentType: "application/json;charset=utf-8", contentType: "application/json;charset=utf-8",

Loading…
Cancel
Save