Browse Source

更新仓库选择、类型选择算法

lwx_dev
erdanergou 3 years ago
parent
commit
7cc7af54ec
  1. 47
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java
  2. 2
      src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
  3. 220
      src/main/java/com/dreamchaser/depository_manage/entity/Depository.java
  4. 4
      src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryMapper.java
  5. 5
      src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryMapper.xml
  6. 5
      src/main/java/com/dreamchaser/depository_manage/service/DepositoryService.java
  7. 369
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java
  8. 8
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java
  9. 151
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialTypeServiceImpl.java
  10. 40
      src/main/java/com/dreamchaser/depository_manage/utils/LinkInterfaceUtil.java
  11. 1
      src/main/resources/static/css/public.css
  12. 2
      src/main/resources/static/lib/layui-v2.6.3/css/layui.css
  13. 9
      src/main/resources/templates/pages/application/application-in.html
  14. 9
      src/main/resources/templates/pages/application/application-in_back.html
  15. 13
      src/main/resources/templates/pages/application/application-in_scanQrCode.html
  16. 20
      src/main/resources/templates/pages/application/application-out.html
  17. 9
      src/main/resources/templates/pages/application/application-out_back.html
  18. 13
      src/main/resources/templates/pages/application/application-out_scanQrCode.html
  19. 4
      src/main/resources/templates/pages/application/application-review.html
  20. 10
      src/main/resources/templates/pages/application/application-transfer.html
  21. 11
      src/main/resources/templates/pages/application/application-transfer_back.html
  22. 2
      src/main/resources/templates/pages/application/application_in_multi.html
  23. 4
      src/main/resources/templates/pages/application/application_multi.html
  24. 3
      src/main/resources/templates/pages/application/my-apply.html
  25. 8
      src/main/resources/templates/pages/application/my-task.html
  26. 2
      src/main/resources/templates/pages/company/company_add.html
  27. 2
      src/main/resources/templates/pages/company/company_edit.html
  28. 2
      src/main/resources/templates/pages/material/material-add.html
  29. 2
      src/main/resources/templates/pages/material/material-view.html
  30. 2
      src/main/resources/templates/pages/materialtype/materialType_add.html
  31. 2
      src/main/resources/templates/pages/materialtype/materialType_edit.html
  32. 8
      src/main/resources/templates/pages/other/welcome_mobile.html
  33. 2
      src/main/resources/templates/pages/post/post-view.html
  34. 4
      src/main/resources/templates/pages/stockTaking/stockTakingReview.html
  35. 2
      src/main/resources/templates/pages/user/login.html
  36. 2
      src/main/resources/templates/pages/user/login_back.html
  37. 6
      src/main/resources/templates/pages/warehouse/depository_add.html
  38. 2
      src/main/resources/templates/pages/warehouse/warehouse_view.html
  39. 294
      src/test/java/com/dreamchaser/depository_manage/TestForDepositoryTree.java
  40. 1
      src/test/java/com/dreamchaser/depository_manage/TestForMaterialTree.java
  41. 163
      src/test/java/com/dreamchaser/depository_manage/TestForMaterialTypeTree.java

47
src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java

@ -1,16 +1,12 @@
package com.dreamchaser.depository_manage.controller; package com.dreamchaser.depository_manage.controller;
import cn.hutool.core.lang.Snowflake; import cn.hutool.core.lang.Snowflake;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.exception.MyException; import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.pojo.*; import com.dreamchaser.depository_manage.pojo.*;
import com.dreamchaser.depository_manage.service.*; import com.dreamchaser.depository_manage.service.*;
import com.dreamchaser.depository_manage.utils.*; import com.dreamchaser.depository_manage.utils.*;
import lombok.Data; import lombok.Data;
import org.apache.http.protocol.HTTP;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
@ -416,7 +412,7 @@ public class DepositoryController {
} }
List<Depository> list = depositoryService.findDepositoryRecordPByCondition(map, userByPort); List<Depository> list = depositoryService.findDepositoryRecordPByCondition(map, userByPort);
// 获取所有行政单位 // 获取所有行政单位
Map<String, Object> administration = findAdministration(userByPort); Map<String, Object> administration = LinkInterfaceUtil.findAdministration(userByPort);
List<AdministrationP> administrationPList = (List<AdministrationP>) administration.get("administrationPList"); List<AdministrationP> administrationPList = (List<AdministrationP>) administration.get("administrationPList");
Integer total = (Integer) administration.get("total"); Integer total = (Integer) administration.get("total");
for (int i = 0; i < list.size(); i++) { for (int i = 0; i < list.size(); i++) {
@ -431,44 +427,6 @@ public class DepositoryController {
} }
/**
* 获取当前行政组织
*
* @return
*/
public static Map<String, Object> findAdministration(UserByPort userByPort) {
Map<String, Object> map = new HashMap<>();
String url = PortConfig.external_url + "/org/govlist";
String superior = "313";
map.put("superior", superior);
map.put("state", 1);
String jsonString = JSONObject.toJSONString(map);
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);
JSONObject data = (JSONObject) jsonObject.get("data");
JSONArray list = (JSONArray) data.get("list");
if (list == null) {
list = new JSONArray();
}
Integer total = ObjectFormatUtil.toInteger(data.get("total"));
Map<String, Object> result = new HashMap();
List<AdministrationP> administrationPList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
Administration administration = JSONObject.toJavaObject((JSONObject) list.get(i), Administration.class);
AdministrationP administrationP = new AdministrationP(administration);
administrationPList.add(administrationP);
}
result.put("administrationPList", administrationPList);
result.put("total", total);
return result;
}
/** /**
* 彻底删除仓库记录硬删除 * 彻底删除仓库记录硬删除
* *
@ -1609,9 +1567,10 @@ public class DepositoryController {
public RestResponse InitTreeMenus(@RequestParam(value = "adminorg", required = false) Integer adminorg) { public RestResponse InitTreeMenus(@RequestParam(value = "adminorg", required = false) Integer adminorg) {
List<Object> list = new ArrayList<>(); List<Object> list = new ArrayList<>();
if (Integer.compare(0, adminorg) == 0) { if (Integer.compare(0, adminorg) == 0) {
list = depositoryService.InitTreeMenus(); list = depositoryService.InitTreeMenus("");
} else { } else {
list = depositoryService.InitTreeMenus(adminorg.toString()); list = depositoryService.InitTreeMenus(adminorg.toString());
} }
return new RestResponse(list); return new RestResponse(list);
} }

2
src/main/java/com/dreamchaser/depository_manage/controller/PageController.java

@ -348,7 +348,7 @@ public class PageController {
UserByPort userByPort = (UserByPort) request.getAttribute("userToken"); UserByPort userByPort = (UserByPort) request.getAttribute("userToken");
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
mv.setViewName("pages/warehouse/depository_add"); mv.setViewName("pages/warehouse/depository_add");
Map<String, Object> administration = DepositoryController.findAdministration(userByPort); Map<String, Object> administration = LinkInterfaceUtil.findAdministration(userByPort);
List<AdministrationP> administrationPList = (List<AdministrationP>) administration.get("administrationPList"); List<AdministrationP> administrationPList = (List<AdministrationP>) administration.get("administrationPList");
mv.addObject("administrationPList", administrationPList); mv.addObject("administrationPList", administrationPList);
return mv; return mv;

220
src/main/java/com/dreamchaser/depository_manage/entity/Depository.java

@ -1,11 +1,14 @@
package com.dreamchaser.depository_manage.entity; package com.dreamchaser.depository_manage.entity;
import lombok.Data;
/** /**
* depository * depository
* *
* @author bianj * @author bianj
* @version 1.0.0 2021-05-20 * @version 1.0.0 2021-05-20
*/ */
@Data
public class Depository { public class Depository {
/** 版本号 */ /** 版本号 */
private static final long serialVersionUID = -2259445638130429647L; private static final long serialVersionUID = -2259445638130429647L;
@ -62,222 +65,5 @@ public class Depository {
* 当前仓库最小存储量 * 当前仓库最小存储量
*/ */
private Integer minNumber; private Integer minNumber;
/**
* 获取id
*
* @return id
*/
public Integer getId() {
return this.id;
}
/**
* 设置id
*
* @param id
*/
public void setId(Integer id) {
this.id = id;
}
/**
* 获取仓库名称
*
* @return 仓库名称
*/
public String getDname() {
return this.dname;
}
/**
* 设置仓库名称
*
* @param dname
* 仓库名称
*/
public void setDname(String dname) {
this.dname = dname;
}
/**
* 获取仓库地址
*
* @return 仓库地址
*/
public String getAddress() {
return this.address;
}
/**
* 设置仓库地址
*
* @param address
* 仓库地址
*/
public void setAddress(String address) {
this.address = address;
}
/**
* 获取仓库介绍
*
* @return 仓库介绍
*/
public String getIntroduce() {
return this.introduce;
}
/**
* 设置仓库介绍
*
* @param introduce
* 仓库介绍
*/
public void setIntroduce(String introduce) {
this.introduce = introduce;
}
/**
* 获取仓库状态
* @return
*/
public Integer getState() {
return state;
}
/**
* 设置仓库状态
* @param state
*/
public void setState(Integer state) {
this.state = state;
}
/**
* 获取父级编号
* @return
*/
public Integer getParentId() {
return parentId;
}
/**
* 设置父级编号
* @param parentId
*/
public void setParentId(Integer parentId) {
this.parentId = parentId;
}
/**
* 获取公司编号
* @return
*/
public Integer getCid() {
return cid;
}
/**
* 设置公司编号
* @param cid
*/
public void setCid(Integer cid) {
this.cid = cid;
}
/**
* 获取公司名称
* @return
*/
public String getCname() {
return cname;
}
/**
* 设置公司名称
* @param cname
*/
public void setCname(String cname) {
this.cname = cname;
}
/**
* 获取仓库编码
* @return
*/
public String getCode() {
return code;
}
/**
* 设置仓库编码
* @param code
*/
public void setCode(String code) {
this.code = code;
}
/**
* 获取所属部门
* @return
*/
public String getAdminorg() {
return adminorg;
}
/**
* 设置所属部门
* @param adminorg
*/
public void setAdminorg(String adminorg) {
this.adminorg = adminorg;
}
/**
* 获取部门名称
* @return
*/
public String getAdminorgName() {
return adminorgName;
}
/**
* 设置部门名称
* @param adminorgName
*/
public void setAdminorgName(String adminorgName) {
this.adminorgName = adminorgName;
}
/**
* 获取当前仓库存储最大值
* @return
*/
public Integer getMaxNumber() {
return maxNumber;
}
/**
* 设置当前仓库存储最大值
* @return
*/
public void setMaxNumber(Integer maxNumber) {
this.maxNumber = maxNumber;
}
/**
* 获取当前仓库存储最小值
* @return
*/
public Integer getMinNumber() {
return minNumber;
}
/**
* 设置当前仓库存储最小值
* @return
*/
public void setMinNumber(Integer minNumber) {
this.minNumber = minNumber;
}
/* This code was generated by TableGo tools, mark 2 end. */
} }

4
src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryMapper.java

@ -32,7 +32,7 @@ public interface DepositoryMapper {
* @param ids * @param ids
* @return * @return
*/ */
List<Depository> selectDepositoryRecordByIds(List<Integer> ids); List<Depository> selectDepositoryByIds(List<Integer> ids);
/** /**
* 根据仓库id查询仓库名称 * 根据仓库id查询仓库名称
@ -73,6 +73,8 @@ public interface DepositoryMapper {
*/ */
Depository findDepositoryById(Integer id); Depository findDepositoryById(Integer id);
/** /**
* 根据条件修改数据信息 * 根据条件修改数据信息
* @param map * @param map

5
src/main/java/com/dreamchaser/depository_manage/mapper/DepositoryMapper.xml

@ -58,6 +58,7 @@
Where dc.state != 3 Where dc.state != 3
</select> </select>
<!-- 获取当前部门仓库以及公共仓库--> <!-- 获取当前部门仓库以及公共仓库-->
<select id="findDepositoryByAdminorg" resultMap="depositoryMap" parameterType="string"> <select id="findDepositoryByAdminorg" resultMap="depositoryMap" parameterType="string">
SELECT SELECT
@ -94,10 +95,10 @@
<!-- 根据主键查询多个数据--> <!-- 根据主键查询多个数据-->
<select id="selectDepositoryRecordByIds" parameterType="list" resultMap="depositoryMap"> <select id="selectDepositoryByIds" parameterType="list" resultMap="depositoryMap">
select select
<include refid="allColumns"></include> <include refid="allColumns"></include>
FROM depository WHERE id IN FROM depository d WHERE d.id IN
<foreach collection="list" index="index" item="id" open="(" separator="," close=")"> <foreach collection="list" index="index" item="id" open="(" separator="," close=")">
#{id} #{id}
</foreach> </foreach>

5
src/main/java/com/dreamchaser/depository_manage/service/DepositoryService.java

@ -129,11 +129,6 @@ public interface DepositoryService {
List<Depository> getParentByDepository(Integer id); List<Depository> getParentByDepository(Integer id);
/**
* 构造树形选择框
* @return
*/
List<Object> InitTreeMenus();
/** /**
* 根据部门构造树形选择框 * 根据部门构造树形选择框

369
src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java

@ -1,5 +1,7 @@
package com.dreamchaser.depository_manage.service.impl; package com.dreamchaser.depository_manage.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.entity.*; import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.mapper.DepositoryMapper; import com.dreamchaser.depository_manage.mapper.DepositoryMapper;
import com.dreamchaser.depository_manage.mapper.PlaceMapper; import com.dreamchaser.depository_manage.mapper.PlaceMapper;
@ -14,10 +16,7 @@ import com.dreamchaser.depository_manage.utils.WordUtil;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.*; import java.util.concurrent.*;
@Service @Service
@ -325,6 +324,13 @@ public class DepositoryServiceImpl implements DepositoryService {
return depositoryMapper.getParentByDepository(id); return depositoryMapper.getParentByDepository(id);
} }
@Override
public List<Object> InitTreeMenus(String adminorg) {
List<Object> list = new ArrayList<>();
list = buildTree_New(InitTreeMenus_New(adminorg),0);
return list;
}
/** /**
* 根据多个主键id获取对应数据 * 根据多个主键id获取对应数据
@ -334,38 +340,58 @@ public class DepositoryServiceImpl implements DepositoryService {
*/ */
@Override @Override
public List<Depository> selectDepositoryRecordByIds(List<Integer> ids) { public List<Depository> selectDepositoryRecordByIds(List<Integer> ids) {
return depositoryMapper.selectDepositoryRecordByIds(ids); return depositoryMapper.selectDepositoryByIds(ids);
} }
/** public List<Object> InitTreeMenus_New(String adminorg) {
* 构造树形选择框 // 定义结果集
* List<Object> list = new ArrayList<>();
* @return
*/ // 定义仓库id列表
@Override List<Integer> depositoryIdList = new ArrayList<>();
public List<Object> InitTreeMenus() { // 获取所有仓库
Map<String, Object> param = new HashMap<>(); List<Depository> depositoryAll = depositoryMapper.findDepositoryAll();
param.put("parentId", 0); Integer totalVal = depositoryAll.size();
List<Depository> depositories = depositoryMapper.findDepositoryRecordPByCondition(param);
// 定义分页数量
double size = 10.0;
// 定义线程数
Integer threadSize = (int) Math.ceil(totalVal / size);
// 定义开启线程数目
Integer openThreadSize = 0;
// 开启对应数量的线程 // 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(depositories.size()); ExecutorService exs = Executors.newFixedThreadPool(threadSize);
// 结果集 // 线程结果集
List<Object> list = new ArrayList<>();
List<Future<Object>> futureList = new ArrayList<Future<Object>>(); List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService // 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs); CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
for (int i = 0; i < depositoryAll.size(); i++) {
// 获取当前类型
Depository depository = depositoryAll.get(i);
if (((i + 1) % 100) == 0) { // 如果有100个开启线程进行处理
depositoryIdList.add(depository.getId());
Future<Object> future = completionService.submit(new Task(depositoryIdList,adminorg));
openThreadSize++;
futureList.add(future); // 添加到结果集
depositoryIdList = new ArrayList<>(); // 情况列表
} else {
// 添加id到列表中
depositoryIdList.add(depository.getId());
}
}
if (depositoryIdList.size() > 0) {
for (int i = 0; i < depositories.size(); i++) { // 如果有剩余,开启线程进行处理
Depository d = depositories.get(i); Future<Object> future = completionService.submit(new Task(depositoryIdList,adminorg));
Future<Object> future = completionService.submit(new Task(d,""));
futureList.add(future); futureList.add(future);
openThreadSize++;
} }
// 3.获取结果 // 3.获取结果
for(int i=0;i<depositories.size();i++){ for (int i = 0; i < openThreadSize; i++) {
Object result = null; Object result = null;
try { try {
result = completionService.take().get(); result = completionService.take().get();
@ -374,40 +400,71 @@ public class DepositoryServiceImpl implements DepositoryService {
} catch (ExecutionException e) { } catch (ExecutionException e) {
e.printStackTrace(); e.printStackTrace();
} }
list.add(result); list.addAll((Collection<?>) result);
}
exs.shutdown();
for (int i = 0; i < list.size(); i++) {
JSONObject jsonObject = new JSONObject((Map<String, Object>) list.get(i));
Integer parentId = jsonObject.getInteger("parentId");
if(Integer.compare(parentId,0) != 0) {
if (!checkList(list, parentId)) {
// 如果当前列表中不存在其父级
Depository depositoryById = depositoryMapper.findDepositoryById(parentId);
list.add(InitTreeMenus2(depositoryById, new ArrayList<>()));
}
}
} }
return list; return list;
} }
// 用于执行线程任务
class Task implements Callable<Object> {
// 仓库
List<Integer> depositoryIdList;
// 部门
String adminorg;
public Task(List<Integer> depositoryIdList,String adminorg){
this.depositoryIdList = depositoryIdList;
this.adminorg = adminorg;
}
@Override
public Object call() throws Exception {
/** /**
* 根据部门构造树形选择框 * 获取当前仓库id对应的仓库
*
* @param adminorg
* @return
*/ */
@Override List<Depository> depositories = depositoryMapper.selectDepositoryByIds(depositoryIdList);
public List<Object> InitTreeMenus(String adminorg) {
Map<String, Object> param = new HashMap<>();
param.put("parentId", 0);
param.put("adminorg", 361);
List<Depository> depositories = depositoryMapper.findDepositoryRecordPByCondition(param);
List<Object> list = new ArrayList<>();
// 开启对应数量的线程 // 定义树结构结果集
List<Object> list = new ArrayList<>();
// 定义线程池
ExecutorService exs = Executors.newFixedThreadPool(depositories.size()); ExecutorService exs = Executors.newFixedThreadPool(depositories.size());
// 结果集 // 线程结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>(); List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService // 1.定义CompletionService用于获取结果
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs); CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
// 定义开启线程数
Integer openThreadSize = 0;
for (int i = 0; i < depositories.size(); i++) { for (int i = 0; i < depositories.size(); i++) {
Depository d = depositories.get(i); Depository depository = depositories.get(i);
Future<Object> future = completionService.submit(new Task(d,adminorg)); if("".equals(adminorg)||"361".equals(adminorg)){
futureList.add(future); Future<Object> submit = completionService.submit(new PlaceTask(depository));
futureList.add(submit);
openThreadSize++;
}else{
if(adminorg.equals(depository.getAdminorg())){
Future<Object> submit = completionService.submit(new PlaceTask(depository));
futureList.add(submit);
openThreadSize++;
}
} }
// 3.获取结果 }
for(int i=0;i<depositories.size();i++){ for (int i = 0; i < openThreadSize; i++) {
Object result = null; Object result = null;
try { try {
result = completionService.take().get(); result = completionService.take().get();
@ -420,25 +477,124 @@ public class DepositoryServiceImpl implements DepositoryService {
} }
return list; return list;
} }
}
// 用于执行线程任务 /**
class Task implements Callable<Object> { * 用于给仓库添加对应的库位
*/
class PlaceTask implements Callable<Object>{
Depository d; Depository d;
String adminorg;
public Task(Depository d,String adminorg){ PlaceTask(Depository d){
this.d = d; this.d = d;
this.adminorg = adminorg;
} }
@Override @Override
public Object call() throws Exception { public Object call() throws Exception {
List<Object> childForMaterialTypeByParent = findChildForDepositoryByParent(d.getId(), adminorg); // 获取当前仓库下的库位
Map<String, Object> stringObjectMap = InitTreeMenus2(d, childForMaterialTypeByParent); List<Object> objectList = AddPlaceByDid(d);
return stringObjectMap;
// 将其构造成对应的树形结构类型
Map<String, Object> map = InitTreeMenus2(d, objectList);
return map;
}
}
// 在仓库后添加库位信息
public List<Object> AddPlaceByDid(Depository d) {
if (d != null) {
// 获取当前仓库下的所有库位
List<Object> result = new ArrayList<>();
// 获取该仓库的排
List<Integer> placeXByDid = placeMapper.findPlaceXByDid(d.getId());
if (placeXByDid.size() > 0) {
for (int i = 1; i <= placeXByDid.get(0); i++) {
Map<String, Object> placeX = new HashMap<>();
placeX.put("title", "第" + i + "排货架");
placeX.put("id", -1);
Map<String, Object> param = new HashMap<>();
param.put("did", d.getId());
param.put("x", i);
List<Place> placeByCondition = placeMapper.findPlaceByCondition(param);
if (placeByCondition.size() > 0) {
List<Object> children = new ArrayList<>();
for (int k = 1; k <= placeByCondition.size(); k++) {
Map<String, Object> map = new HashMap<>();
map.put("title", placeByCondition.get(k - 1).getCode());
map.put("id", d.getId() + "-" + placeByCondition.get(k - 1).getId());
children.add(map);
}
placeX.put("children", children);
}
// 获取该仓库该排的列数
result.add(placeX);
}
}
return result;
} else {
return null;
}
}
// 构造树形组件数据模板
public Map<String, Object> InitTreeMenus2(Depository d, List<Object> children) {
if (d != null) {
Map<String, Object> map = new HashMap<>();
map.put("title", d.getDname());
map.put("id", d.getId());
map.put("children", children);
map.put("parentId",d.getParentId());
return map;
} else {
return null;
}
}
/**
* 用于构造树结构
* @param list 树列表
* @param parentId 父级id
* @return
*/
public List<Object> buildTree_New(List<Object> list,Integer parentId){
// 定义树结构
List<Object> result = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
// 构造为jsonObject类
JSONObject jsonObject = new JSONObject((Map<String, Object>) list.get(i));
// 获取当前父级id
Long parentId1 = jsonObject.getLong("parentId");
if(Long.compare(parentId,parentId1) == 0){ // 如果当前类型是其父类
List<Object> objectList = buildTree_New(list, jsonObject.getInteger("id")); // 获取当前类型的子类
JSONArray children = jsonObject.getJSONArray("children");
children.addAll(objectList);
result.add(jsonObject);
}
}
return result;
}
/**
* 判断当前父级id是否在列表中
* @param list
* @param parentId
* @return
*/
public Boolean checkList(List<Object> list,Integer parentId){
for (int i = 0; i < list.size(); i++) {
JSONObject jsonObject = new JSONObject((Map<String, Object>) list.get(i));
Integer pid = jsonObject.getInteger("id");
if(Integer.compare(pid,parentId) == 0){
return true;
} }
} }
return false;
}
/** /**
* 获取当前部门以及公共仓库 * 获取当前部门以及公共仓库
@ -532,119 +688,8 @@ public class DepositoryServiceImpl implements DepositoryService {
return depositoryMapper.getToDayInventoryByDNameTest(); return depositoryMapper.getToDayInventoryByDNameTest();
} }
//判断是否有子类
public boolean isChildForDepository(Integer parentId) {
boolean flag = false;
List<Depository> parentByDepository = depositoryMapper.getParentByDepository(parentId);
if (parentByDepository.size() > 0) {
flag = true;
}
return flag;
}
// 根据id获取子类
public List<Object> findChildForDepositoryByParent(Integer id, String adminorg) {
Map<String, Object> param = new HashMap<>();
List<Object> result = new ArrayList<>();
param.put("parentId", id);
if (!"".equals(adminorg)) {
param.put("adminorg", adminorg);
}
// 获取当前父类的子类
List<Depository> parentByDepository = depositoryMapper.findDepositoryByAdminorgAndParent(param);
if (parentByDepository.size() > 0) {
for (int i = 0; i < parentByDepository.size(); i++) {
Depository d = parentByDepository.get(i);
List<Object> childForMaterialTypeByParent = findChildForDepositoryByParent(d.getId(), adminorg);
if (childForMaterialTypeByParent != null) {
result.add(InitTreeMenus2(d, childForMaterialTypeByParent));
} else {
List<Object> placeList = AddPlaceByDid(d);
result.add(InitTreeMenus2(d, placeList));
}
}
return result;
} else {
return null;
}
}
// 在仓库后添加库位信息
public List<Object> AddPlaceByDid(Depository d) {
if (d != null) {
// 获取当前仓库下的所有库位
List<Object> result = new ArrayList<>();
// 获取该仓库的排
List<Integer> placeXByDid = placeMapper.findPlaceXByDid(d.getId());
if (placeXByDid.size() > 0) {
for (int i = 1; i <= placeXByDid.get(0); i++) {
Map<String, Object> placeX = new HashMap<>();
placeX.put("title", "第" + i + "排货架");
placeX.put("id", -1);
Map<String, Object> param = new HashMap<>();
param.put("did", d.getId());
param.put("x", i);
List<Place> placeByCondition = placeMapper.findPlaceByCondition(param);
if (placeByCondition.size() > 0) {
List<Object> children = new ArrayList<>();
for (int k = 1; k <= placeByCondition.size(); k++) {
Map<String, Object> map = new HashMap<>();
map.put("title", placeByCondition.get(k - 1).getCode());
map.put("id", d.getId() + "-" + placeByCondition.get(k - 1).getId());
children.add(map);
}
placeX.put("children", children);
}
// 获取该仓库该排的列数
/*
List<Integer> placeYByDid = placeMapper.findPlaceYByDid(param);
if(placeYByDid.size() > 0) {
List<Object> childrenY = new ArrayList<>();
for (int j = 1; j <= placeYByDid.get(0); j++) {
Map<String,Object> placeY = new HashMap<>();
placeY.put("title","第"+j+"列");
placeY.put("id",-1);
childrenY.add(placeY);
param.put("y",j);
// 获取该仓库该排该列的库位
List<Place> placeByCondition = placeMapper.findPlaceByCondition(param);
List<Object> children= new ArrayList<>();
if(placeByCondition.size() > 0) {
for (int k = 1; k <= placeByCondition.size(); k++) {
Map<String, Object> map = new HashMap<>();
map.put("title", placeByCondition.get(k - 1).getCode());
map.put("id", d.getId()+"-"+placeByCondition.get(k - 1).getId());
children.add(map);
}
placeY.put("children", children);
}
}
placeX.put("children",childrenY);
}*/
result.add(placeX);
}
}
return result;
} else {
return null;
}
}
// 构造树形组件数据模板
public Map<String, Object> InitTreeMenus2(Depository d, List<Object> children) {
if (d != null) {
Map<String, Object> map = new HashMap<>();
map.put("title", d.getDname());
map.put("id", d.getId());
map.put("children", children);
return map;
} else {
return null;
}
}
private boolean hasDepository(List<Depository> list,Depository o){ private boolean hasDepository(List<Depository> list,Depository o){

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

@ -1736,6 +1736,9 @@ public class MaterialServiceImpl implements MaterialService {
// 定义线程数 // 定义线程数
Integer threadSize = (int) Math.ceil(totalVal / size); Integer threadSize = (int) Math.ceil(totalVal / size);
// 定义开启线程数
Integer openThreadSize = 0;
// 开启对应数量的线程 // 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize); ExecutorService exs = Executors.newFixedThreadPool(threadSize);
// 树结构结果集 // 树结构结果集
@ -1754,6 +1757,7 @@ public class MaterialServiceImpl implements MaterialService {
materialTypeList.add(materialType.getOldId()); materialTypeList.add(materialType.getOldId());
Future<Object> future = completionService.submit(new TaskTest_New(materialTypeList)); Future<Object> future = completionService.submit(new TaskTest_New(materialTypeList));
futureList.add(future); // 添加到结果集 futureList.add(future); // 添加到结果集
openThreadSize++;
materialTypeList = new ArrayList<>(); // 情况列表 materialTypeList = new ArrayList<>(); // 情况列表
} else { } else {
// 添加id到列表中 // 添加id到列表中
@ -1765,10 +1769,11 @@ public class MaterialServiceImpl implements MaterialService {
// 如果有剩余,开启线程进行处理 // 如果有剩余,开启线程进行处理
Future<Object> future = completionService.submit(new TaskTest_New(materialTypeList)); Future<Object> future = completionService.submit(new TaskTest_New(materialTypeList));
futureList.add(future); futureList.add(future);
openThreadSize++;
} }
// 3.获取结果 // 3.获取结果
for (int i = 0; i < threadSize; i++) { for (int i = 0; i < openThreadSize; i++) {
Object result = null; Object result = null;
try { try {
result = completionService.take().get(); result = completionService.take().get();
@ -1779,6 +1784,7 @@ public class MaterialServiceImpl implements MaterialService {
} }
list.addAll((Collection<?>) result); list.addAll((Collection<?>) result);
} }
exs.shutdown();
// 进行最终的封装 // 进行最终的封装
return list; return list;
} }

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

@ -1,5 +1,7 @@
package com.dreamchaser.depository_manage.service.impl; package com.dreamchaser.depository_manage.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.entity.MaterialType; import com.dreamchaser.depository_manage.entity.MaterialType;
import com.dreamchaser.depository_manage.mapper.MaterialTypeMapper; import com.dreamchaser.depository_manage.mapper.MaterialTypeMapper;
import com.dreamchaser.depository_manage.service.MaterialTypeService; import com.dreamchaser.depository_manage.service.MaterialTypeService;
@ -8,10 +10,8 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.awt.*; import java.awt.*;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import java.util.concurrent.*; import java.util.concurrent.*;
/** /**
@ -188,37 +188,61 @@ public class MaterialTypeServiceImpl implements MaterialTypeService {
* 构造树形选择框 * 构造树形选择框
* @return * @return
*/ */
/*@Override @Override
public List<Object> InitTreeMenus() { public List<Object> InitTreeMenus() {
List<MaterialType> materialTypeNoParent = materialTypeMapper.findMaterialTypeNoParent();
List<Object> list = new ArrayList<>(); List<Object> list = new ArrayList<>();
for (int i = 0; i < materialTypeNoParent.size(); i++) { list = buildTree_New(InitTreeMenus_New(),Long.valueOf(0));
MaterialType mt = materialTypeNoParent.get(i);
List<Object> childForMaterialTypeByParent = findChildForMaterialTypeByParent(mt.getOldId());
Map<String, Object> stringObjectMap = InitTreeMenus(mt,childForMaterialTypeByParent);
list.add(stringObjectMap);
}
return list; return list;
}*/ }
@Override
public List<Object> InitTreeMenus() { public List<Object> InitTreeMenus_New() {
List<MaterialType> materialTypeNoParent = materialTypeMapper.findMaterialTypeNoParent(); // 获取所有物料类型
List<MaterialType> materialTypeAll = materialTypeMapper.findMaterialTypeAll();
// 物料总数
Integer totalVal = materialTypeAll.size();
// 定义分页数量
double size = 100.0;
// 定义线程数
Integer threadSize = (int) Math.ceil(totalVal / size);
// 定义开启线程数
Integer openThreadSize = 0;
// 开启对应数量的线程 // 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(materialTypeNoParent.size()); ExecutorService exs = Executors.newFixedThreadPool(threadSize);
// 结果集 // 树结构结果集
List<Object> list = new ArrayList<>(); List<Object> list = new ArrayList<>();
// 线程结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>(); List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService // 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs); CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
// 物料类型id列表
List<Long> materialTypeList = new ArrayList<>();
for (int i = 0; i < materialTypeAll.size(); i++) {
// 获取当前类型
MaterialType materialType = materialTypeAll.get(i);
if (((i + 1) % 100) == 0) { // 如果有100个开启线程进行处理
materialTypeList.add(materialType.getOldId());
Future<Object> future = completionService.submit(new TaskTest_New(materialTypeList));
futureList.add(future); // 添加到结果集
openThreadSize++;
materialTypeList = new ArrayList<>(); // 情况列表
} else {
// 添加id到列表中
materialTypeList.add(materialType.getOldId());
}
}
for (int i = 0; i < materialTypeNoParent.size(); i++) { if (materialTypeList.size() > 0) {
MaterialType mt = materialTypeNoParent.get(i); // 如果有剩余,开启线程进行处理
Future<Object> future = completionService.submit(new Task(mt)); Future<Object> future = completionService.submit(new TaskTest_New(materialTypeList));
futureList.add(future); futureList.add(future);
openThreadSize++;
} }
// 3.获取结果 // 3.获取结果
for(int i=0;i<materialTypeNoParent.size();i++){ for (int i = 0; i < openThreadSize; i++) {
Object result = null; Object result = null;
try { try {
result = completionService.take().get(); result = completionService.take().get();
@ -227,26 +251,40 @@ public class MaterialTypeServiceImpl implements MaterialTypeService {
} catch (ExecutionException e) { } catch (ExecutionException e) {
e.printStackTrace(); e.printStackTrace();
} }
list.add(result); list.addAll((Collection<?>) result);
} }
exs.shutdown();
// 进行最终的封装
return list; return list;
} }
// 用于执行线程任务 // 用于执行测试新算法
class Task implements Callable<Object> { class TaskTest_New implements Callable<Object> {
MaterialType mt; // 待处理的物料类型id列表
List<Long> materialTypeIdList;
public Task(MaterialType mt){ public TaskTest_New(List<Long> materialTypeByCondition) {
this.mt = mt; this.materialTypeIdList = materialTypeByCondition;
} }
@Override @Override
public Object call() throws Exception { public Object call() throws Exception {
List<Object> childForMaterialTypeByParent = findChildForMaterialTypeByParent(mt.getOldId());
Map<String, Object> stringObjectMap = InitTreeMenus(mt,childForMaterialTypeByParent); // 定义树结构结果集
return stringObjectMap; List<Object> list = new ArrayList<>();
// 查询当前物料类型id列表中的物料类型
List<MaterialType> materialTypeByOldIds = materialTypeMapper.findMaterialTypeByOldIds(materialTypeIdList);
for (int i = 0; i < materialTypeByOldIds.size(); i++) {
MaterialType mt = materialTypeByOldIds.get(i);
Map<String, Object> map = InitTreeMenus(mt, new ArrayList<>());
list.add(map);
} }
return list;
}
} }
// 构造树形组件数据模板 // 构造树形组件数据模板
@ -255,44 +293,37 @@ public class MaterialTypeServiceImpl implements MaterialTypeService {
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("title", mt.getTname()); map.put("title", mt.getTname());
map.put("id", mt.getOldId()); map.put("id", mt.getOldId());
map.put("parentId",mt.getParentId());
map.put("children",children); map.put("children",children);
return map; return map;
} } else {
else{
return null; return null;
} }
} }
// 判断是否有子类 /**
public boolean isChildForMaterialType(Integer id){ * 用于构造树结构
boolean flag = false; * @param list 树列表
Map<String,Object> param = new HashMap<>(); * @param parentId 父级id
param.put("parentId",id); * @return
Integer count = materialTypeMapper.findMaterialTypeCountByCondition(param); */
if(count > 0){ public List<Object> buildTree_New(List<Object> list,Long parentId){
flag = true; // 定义树结构
}
return flag;
}
// 根据id获取子类
public List<Object> findChildForMaterialTypeByParent(Long Oldid){
Map<String,Object> param = new HashMap<>();
List<Object> result = new ArrayList<>(); List<Object> result = new ArrayList<>();
Map<String,Object> children = new HashMap<>(); for (int i = 0; i < list.size(); i++) {
param.put("parentId",Oldid); // 构造为jsonObject类
// 获取当前父类的子类 JSONObject jsonObject = new JSONObject((Map<String, Object>) list.get(i));
List<MaterialType> materialTypeByCondition = materialTypeMapper.findMaterialTypeByCondition(param); // 获取当前父级id
if(materialTypeByCondition.size() > 0){ Long parentId1 = jsonObject.getLong("parentId");
for (int i = 0; i < materialTypeByCondition.size(); i++) { if(Long.compare(parentId,parentId1) == 0){ // 如果当前类型是其父类
MaterialType mt = materialTypeByCondition.get(i); List<Object> objectList = buildTree_New(list, jsonObject.getLong("id")); // 获取当前类型的子类
List<Object> childForMaterialTypeByParent = findChildForMaterialTypeByParent(mt.getOldId()); JSONArray children = jsonObject.getJSONArray("children");
result.add(InitTreeMenus(mt,childForMaterialTypeByParent)); children.addAll(objectList);
result.add(jsonObject);
} }
return result;
}else{
return null;
} }
return result;
} }
} }

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

@ -111,6 +111,8 @@ public class LinkInterfaceUtil {
String url = PortConfig.external_url + "/org/govlist"; String url = PortConfig.external_url + "/org/govlist";
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("superior", superior); map.put("superior", superior);
map.put("level",4);
map.put("state",1);
String jsonString = JSONObject.toJSONString(map); String jsonString = JSONObject.toJSONString(map);
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
@ -179,4 +181,42 @@ public class LinkInterfaceUtil {
JSONObject data = (JSONObject) jsonObject.get("data"); JSONObject data = (JSONObject) jsonObject.get("data");
return data; return data;
} }
/**
* 获取当前行政组织列表
* @return
*/
public static Map<String, Object> findAdministration(UserByPort userByPort) {
Map<String, Object> map = new HashMap<>();
String url = PortConfig.external_url + "/org/govlist";
String superior = "313";
map.put("superior", superior);
map.put("state", 1);
map.put("level",3);
String jsonString = JSONObject.toJSONString(map);
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);
JSONObject data = (JSONObject) jsonObject.get("data");
JSONArray list = (JSONArray) data.get("list");
if (list == null) {
list = new JSONArray();
}
Integer total = ObjectFormatUtil.toInteger(data.get("total"));
Map<String, Object> result = new HashMap();
List<AdministrationP> administrationPList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
Administration administration = JSONObject.toJavaObject((JSONObject) list.get(i), Administration.class);
AdministrationP administrationP = new AdministrationP(administration);
administrationPList.add(administrationP);
}
result.put("administrationPList", administrationPList);
result.put("total", total);
return result;
}
} }

1
src/main/resources/static/css/public.css

@ -1,5 +1,4 @@
body { body {
margin: 15px 15px 15px 15px;
background: #f2f2f2; background: #f2f2f2;
} }

2
src/main/resources/static/lib/layui-v2.6.3/css/layui.css

File diff suppressed because one or more lines are too long

9
src/main/resources/templates/pages/application/application-in.html

@ -36,6 +36,9 @@
.lay-step{ .lay-step{
display: none; display: none;
} }
.layui-form-select .layui-input{
border-style: none;
}
</style> </style>
@ -47,7 +50,7 @@
<div class="layui-carousel" id="stepForm" lay-filter="stepForm" style="margin: 0 auto; "> <div class="layui-carousel" id="stepForm" lay-filter="stepForm" style="margin: 0 auto; ">
<div carousel-item style="overflow: inherit"> <div carousel-item style="overflow: inherit">
<div> <div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;"> <form class="layui-form layui-form-pane" style="margin: 0 auto;max-width: 460px;">
<div class="layui-card" id="cardParent"> <div class="layui-card" id="cardParent">
<div class="layui-card-body" id="cardItem" style="padding-right: 0px"> <div class="layui-card-body" id="cardItem" style="padding-right: 0px">
<hr> <hr>
@ -415,8 +418,8 @@
<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">
<textarea name=` + "applyRemark" + NewIdNumber + ` placeholder="请填写相关原因及申请原因" value="" <input name=` + "applyRemark" + NewIdNumber + ` placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea> class="layui-input"/>
</div> </div>
</div> </div>
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i> <i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>

9
src/main/resources/templates/pages/application/application-in_back.html

@ -26,6 +26,9 @@
.lay-step{ .lay-step{
display: none; display: none;
} }
.layui-form-select .layui-input{
border-style: none;
}
</style> </style>
<div class="layuimini-container"> <div class="layuimini-container">
@ -37,7 +40,7 @@
<div class="layui-carousel" id="stepForm" lay-filter="stepForm" style="margin: 0 auto;"> <div class="layui-carousel" id="stepForm" lay-filter="stepForm" style="margin: 0 auto;">
<div carousel-item> <div carousel-item>
<div> <div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;"> <form class="layui-form layui-form-pane" style="margin: 0 auto;max-width: 460px;">
<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" style="margin: 0px;"> <div class="layui-input-block" style="margin: 0px;">
@ -96,8 +99,8 @@
<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">
<textarea name="applyRemark" placeholder="请填写相关原因及申请原因" value="" <input name="applyRemark" placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea> class="layui-input"/>
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">

13
src/main/resources/templates/pages/application/application-in_scanQrCode.html

@ -34,6 +34,9 @@
.lay-step{ .lay-step{
display: none; display: none;
} }
.layui-form-select .layui-input{
border-style: none;
}
</style> </style>
@ -48,7 +51,7 @@
<input th:value="${place}" style="display: none" id="scanValue_placeId"> <input th:value="${place}" style="display: none" id="scanValue_placeId">
<div carousel-item style="overflow: inherit"> <div carousel-item style="overflow: inherit">
<div> <div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;"> <form class="layui-form layui-form-pane" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<div class="layui-card" id="cardParent"> <div class="layui-card" id="cardParent">
@ -304,8 +307,8 @@
var lastItem = `<div class="layui-form-item"> var lastItem = `<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">
<textarea name=` + "applyRemark" + NewIdNumber + ` placeholder="请填写相关原因及申请原因" value="" <input name=` + "applyRemark" + NewIdNumber + ` placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea> class="layui-input"/>
</div> </div>
</div> </div>
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i> <i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>
@ -531,8 +534,8 @@
var lastItem = `<div class="layui-form-item"> var lastItem = `<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">
<textarea name=` + "applyRemark" + NewIdNumber + ` placeholder="请填写相关原因及申请原因" value="" <input name=` + "applyRemark" + NewIdNumber + ` placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea> class="layui-input"/>
</div> </div>
</div> </div>
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i> <i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>

20
src/main/resources/templates/pages/application/application-out.html

@ -41,6 +41,10 @@
.lay-step { .lay-step {
display: none; display: none;
} }
.layui-form-select .layui-input{
border-style: none;
}
</style> </style>
<div class="layuimini-container"> <div class="layuimini-container">
<div class="layuimini-main"> <div class="layuimini-main">
@ -49,7 +53,7 @@
<div class="layui-carousel" id="stepForm" lay-filter="stepForm" style="margin: 0 auto;"> <div class="layui-carousel" id="stepForm" lay-filter="stepForm" style="margin: 0 auto;">
<div carousel-item style="overflow: inherit"> <div carousel-item style="overflow: inherit">
<div> <div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;"> <form class="layui-form layui-form-pane" style="margin: 0 auto;max-width: 460px;">
<div class="layui-card" id="cardParent"> <div class="layui-card" id="cardParent">
<div class="layui-card-body" id="cardItem"> <div class="layui-card-body" id="cardItem">
<hr> <hr>
@ -108,8 +112,8 @@
<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">
<textarea name="applyRemark" placeholder="请填写相关原因及申请原因" value="" <input name="applyRemark" placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea> class="layui-input"/>
</div> </div>
</div> </div>
<i class="layui-icon layui-icon-addition" style="display: inline" <i class="layui-icon layui-icon-addition" style="display: inline"
@ -121,7 +125,7 @@
<div class="layui-input-block"> <div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formStep" <button class="layui-btn" lay-submit lay-filter="formStep"
style="margin-bottom: 30px;margin-left: 15%"> style="margin-bottom: 30px;margin-left: 15%">
&emsp;提交申请&emsp; &emsp;提交&emsp;
</button> </button>
</div> </div>
</div> </div>
@ -340,8 +344,8 @@
<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">
<textarea name=` + "applyRemark" + NewIdNumber + ` placeholder="请填写相关原因及申请原因" value="" <input name=` + "applyRemark" + NewIdNumber + ` placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea> class="layui-input"/>
</div> </div>
</div> </div>
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i> <i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>
@ -410,8 +414,8 @@
var lastItem = `<div class="layui-form-item"> var lastItem = `<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">
<textarea name=` + "applyRemark" + NewIdNumber + ` placeholder="请填写相关原因及申请原因" value="" <input name=` + "applyRemark" + NewIdNumber + ` placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea> class="layui-input"/>
</div> </div>
</div> </div>
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i> <i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>

9
src/main/resources/templates/pages/application/application-out_back.html

@ -25,6 +25,9 @@
.lay-step{ .lay-step{
display: none; display: none;
} }
.layui-form-select .layui-input{
border-style: none;
}
</style> </style>
<div class="layuimini-container"> <div class="layuimini-container">
<div class="layuimini-main"> <div class="layuimini-main">
@ -34,7 +37,7 @@
<div class="layui-carousel" id="stepForm" lay-filter="stepForm" style="margin: 0 auto;"> <div class="layui-carousel" id="stepForm" lay-filter="stepForm" style="margin: 0 auto;">
<div carousel-item> <div carousel-item>
<div> <div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;"> <form class="layui-form layui-form-pane" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<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">
@ -70,13 +73,13 @@
<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">
<textarea name="applyRemark" placeholder="请填写相关原因及申请原因" value="" class="layui-textarea"></textarea> <input name="applyRemark" placeholder="请填写相关原因及申请原因" value="" class="layui-input"/>
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">
<div class="layui-input-block"> <div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formStep"> <button class="layui-btn" lay-submit lay-filter="formStep">
&emsp;提交申请&emsp; &emsp;提交&emsp;
</button> </button>
</div> </div>
</div> </div>

13
src/main/resources/templates/pages/application/application-out_scanQrCode.html

@ -25,6 +25,9 @@
.lay-step{ .lay-step{
display: none; display: none;
} }
.layui-form-select .layui-input{
border-style: none;
}
</style> </style>
<div class="layuimini-container"> <div class="layuimini-container">
<div class="layuimini-main"> <div class="layuimini-main">
@ -36,7 +39,7 @@
<input th:value="${place}" style="display: none" id="scanValue_placeId"> <input th:value="${place}" style="display: none" id="scanValue_placeId">
<div carousel-item style="overflow: inherit"> <div carousel-item style="overflow: inherit">
<div> <div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;"> <form class="layui-form layui-form-pane" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<div class="layui-card" id="cardParent"> <div class="layui-card" id="cardParent">
@ -225,8 +228,8 @@
<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">
<textarea name=`+"applyRemark"+NewIdNumber+` placeholder="请填写相关原因及申请原因" value="" <input name=`+"applyRemark"+NewIdNumber+` placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea> class="layui-input"/>
</div> </div>
</div> </div>
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i> <i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>
@ -394,8 +397,8 @@
<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">
<textarea name=`+"applyRemark"+NewIdNumber+` placeholder="请填写相关原因及申请原因" value="" <input name=`+"applyRemark"+NewIdNumber+` placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea> class="layui-input"/>
</div> </div>
</div> </div>
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i> <i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>

4
src/main/resources/templates/pages/application/application-review.html

@ -96,7 +96,7 @@
<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">
<textarea id="departmentheadMessageF" name="departmentheadMessage" placeholder="请填写相关原因及申请原因" value="" class="layui-textarea"></textarea> <input id="departmentheadMessageF" name="departmentheadMessage" placeholder="请填写相关原因及申请原因" value="" class="layui-input"/>
</div> </div>
</div> </div>
@ -124,7 +124,7 @@
<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">
<textarea id="depositoryManagerMessageF" name="depositoryManagerMessage" placeholder="请填写相关原因及申请原因" value="" class="layui-textarea"></textarea> <input id="depositoryManagerMessageF" name="depositoryManagerMessage" placeholder="请填写相关原因及申请原因" value="" class="layui-input"/>
</div> </div>
</div> </div>

10
src/main/resources/templates/pages/application/application-transfer.html

@ -41,7 +41,7 @@
<div carousel-item style="overflow: inherit"> <div carousel-item style="overflow: inherit">
<div> <div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;"> <form class="layui-form layui-form-pane" style="margin: 0 auto;max-width: 460px;">
<div class="layui-card" id="cardParent"> <div class="layui-card" id="cardParent">
<div class="layui-card-body" id="cardItem"> <div class="layui-card-body" id="cardItem">
<hr> <hr>
@ -118,7 +118,7 @@
<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">
<textarea name="applyRemark" placeholder="请填写相关原因及申请原因" value="" class="layui-textarea"></textarea> <input name="applyRemark" placeholder="请填写相关原因及申请原因" value="" class="layui-input"/>
</div> </div>
</div> </div>
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i> <i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>
@ -127,7 +127,7 @@
<div class="layui-form-item" id="btn_sub"> <div class="layui-form-item" id="btn_sub">
<div class="layui-input-block"> <div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formStep" style="margin-bottom: 10px;margin-left: 15%"> <button class="layui-btn" lay-submit lay-filter="formStep" style="margin-bottom: 10px;margin-left: 15%">
&emsp;提交申请&emsp; &emsp;提交&emsp;
</button> </button>
</div> </div>
</div> </div>
@ -355,8 +355,8 @@
<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">
<textarea name=`+"applyRemark"+NewIdNumber+` placeholder="请填写相关原因及申请原因" value="" <input name=`+"applyRemark"+NewIdNumber+` placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea> class="layui-input"/>
</div> </div>
</div> </div>
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i> <i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>

11
src/main/resources/templates/pages/application/application-transfer_back.html

@ -26,6 +26,7 @@
.lay-step{ .lay-step{
display: none; display: none;
} }
</style> </style>
<div class="layuimini-container"> <div class="layuimini-container">
<div class="layuimini-main"> <div class="layuimini-main">
@ -35,7 +36,7 @@
<div carousel-item style="overflow: inherit"> <div carousel-item style="overflow: inherit">
<div> <div>
<form class="layui-form" style="margin: 0 auto;max-width: 460px;padding-top: 40px;"> <form class="layui-form layui-form-pane" style="margin: 0 auto;max-width: 460px;padding-top: 40px;">
<div class="layui-card" id="cardParent"> <div class="layui-card" id="cardParent">
<div class="layui-card-body" id="cardItem1"> <div class="layui-card-body" id="cardItem1">
<hr> <hr>
@ -88,7 +89,7 @@
<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">
<textarea name="applyRemark" placeholder="请填写相关原因及申请原因" value="" class="layui-textarea"></textarea> <input name="applyRemark" placeholder="请填写相关原因及申请原因" value="" class="layui-input"/>
</div> </div>
</div> </div>
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i> <i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>
@ -97,7 +98,7 @@
<div class="layui-form-item"> <div class="layui-form-item">
<div class="layui-input-block"> <div class="layui-input-block">
<button class="layui-btn" lay-submit lay-filter="formStep" style="margin-bottom: 10px;margin-left: 15%"> <button class="layui-btn" lay-submit lay-filter="formStep" style="margin-bottom: 10px;margin-left: 15%">
&emsp;提交申请&emsp; &emsp;提交&emsp;
</button> </button>
</div> </div>
</div> </div>
@ -274,8 +275,8 @@
<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">
<textarea name=`+"applyRemark"+NewIdNumber+` placeholder="请填写相关原因及申请原因" value="" <input name=`+"applyRemark"+NewIdNumber+` placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea> class="layui-input"/>
</div> </div>
</div> </div>
<i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i> <i class="layui-icon layui-icon-addition" style="display: inline" onclick="addItem(this)"></i>

2
src/main/resources/templates/pages/application/application_in_multi.html

@ -23,7 +23,7 @@
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table> <table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
<script id="currentTableBar" type="text/html"> <script id="currentTableBar" type="text/html">
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-subclass" lay-event="applicationIn">入库申请</a> <a class="layui-btn layui-btn-normal layui-btn-xs data-count-subclass" lay-event="applicationIn">入库</a>
<a class="layui-btn layui-btn-xs data-count-edit" lay-event="applicationOut" >出库申请</a> <a class="layui-btn layui-btn-xs data-count-edit" lay-event="applicationOut" >出库申请</a>
</script> </script>

4
src/main/resources/templates/pages/application/application_multi.html

@ -17,14 +17,14 @@
<script id="toolbarDemo" type="text/html"> <script id="toolbarDemo" type="text/html">
<div class="layui-btn-container"> <div class="layui-btn-container">
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="delete">删除</button> <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="delete">删除</button>
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="applicationIn">入库申请</button> <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="applicationIn">入库</button>
<button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="applicationOut">出库申请</button> <button class="layui-btn layui-btn-normal layui-btn-sm data-add-btn" lay-event="applicationOut">出库申请</button>
</div> </div>
</script> </script>
<table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table> <table class="layui-hide" id="currentTableId" lay-filter="currentTableFilter"></table>
<script id="currentTableBar" type="text/html"> <script id="currentTableBar" type="text/html">
<a class="layui-btn layui-btn-normal layui-btn-xs data-count-subclass" lay-event="applicationIn">入库申请</a> <a class="layui-btn layui-btn-normal layui-btn-xs data-count-subclass" lay-event="applicationIn">入库</a>
<a class="layui-btn layui-btn-xs data-count-edit" lay-event="applicationOut" >出库申请</a> <a class="layui-btn layui-btn-xs data-count-edit" lay-event="applicationOut" >出库申请</a>
</script> </script>
</div> </div>

3
src/main/resources/templates/pages/application/my-apply.html

@ -30,7 +30,7 @@
<li>出库申请</li> <li>出库申请</li>
<li>盘点申请</li> <li>盘点申请</li>
</ul> </ul>
<div class="layui-tab-content" style="height: 100px;"> <div class="layui-tab-content">
<div class="layui-tab-item layui-show"> <div class="layui-tab-item layui-show">
<ul id="LAY_floor_in" class="flow-default" style="width: 100%"></ul> <ul id="LAY_floor_in" class="flow-default" style="width: 100%"></ul>
</div> </div>
@ -88,7 +88,6 @@
+result[i].createTime+'</div></div></li>'); +result[i].createTime+'</div></div></li>');
} }
lis1.push('</div>'); lis1.push('</div>');
lis1.push('<hr class="layui-border-black">')
takingPre+=result.length; takingPre+=result.length;
//执行下一页渲染,第二参数为:满足“加载更多”的条件,即后面仍有分页 //执行下一页渲染,第二参数为:满足“加载更多”的条件,即后面仍有分页
//pages为Ajax返回的总页数,只有当前页小于总页数的情况下,才会继续出现加载更多 //pages为Ajax返回的总页数,只有当前页小于总页数的情况下,才会继续出现加载更多

8
src/main/resources/templates/pages/application/my-task.html

@ -30,7 +30,7 @@
<li class="layui-this">未完成任务</li> <li class="layui-this">未完成任务</li>
<li>已完成任务</li> <li>已完成任务</li>
</ul> </ul>
<div class="layui-tab-content" style="height: 100px;"> <div class="layui-tab-content">
<div class="layui-tab-item layui-show"> <div class="layui-tab-item layui-show">
<div class="layui-tab layui-tab-card"> <div class="layui-tab layui-tab-card">
<ul class="layui-tab-title"> <ul class="layui-tab-title">
@ -138,7 +138,6 @@
+ result[i].applicantTime + '</div></div></li>'); + result[i].applicantTime + '</div></div></li>');
} }
lis.push('</div>'); lis.push('</div>');
lis.push('<hr class="layui-border-black">')
pre1 += result.length; pre1 += result.length;
//执行下一页渲染,第二参数为:满足“加载更多”的条件,即后面仍有分页 //执行下一页渲染,第二参数为:满足“加载更多”的条件,即后面仍有分页
//pages为Ajax返回的总页数,只有当前页小于总页数的情况下,才会继续出现加载更多 //pages为Ajax返回的总页数,只有当前页小于总页数的情况下,才会继续出现加载更多
@ -160,7 +159,6 @@
+ result[i].createTime + '</div></div></li>'); + result[i].createTime + '</div></div></li>');
} }
lis1.push('</div>'); lis1.push('</div>');
lis1.push('<hr class="layui-border-black">')
pre3 += result.length; pre3 += result.length;
//执行下一页渲染,第二参数为:满足“加载更多”的条件,即后面仍有分页 //执行下一页渲染,第二参数为:满足“加载更多”的条件,即后面仍有分页
//pages为Ajax返回的总页数,只有当前页小于总页数的情况下,才会继续出现加载更多 //pages为Ajax返回的总页数,只有当前页小于总页数的情况下,才会继续出现加载更多
@ -197,7 +195,6 @@
+ result[i].applicantTime + '</div></div></li>'); + result[i].applicantTime + '</div></div></li>');
} }
lis.push("</div>"); lis.push("</div>");
lis.push('<hr class="layui-border-black">');
pre2 += result.length; pre2 += result.length;
//执行下一页渲染,第二参数为:满足“加载更多”的条件,即后面仍有分页 //执行下一页渲染,第二参数为:满足“加载更多”的条件,即后面仍有分页
//pages为Ajax返回的总页数,只有当前页小于总页数的情况下,才会继续出现加载更多 //pages为Ajax返回的总页数,只有当前页小于总页数的情况下,才会继续出现加载更多
@ -219,7 +216,6 @@
+ result[i].createTime + '</div></div></li>'); + result[i].createTime + '</div></div></li>');
} }
lis1.push('</div>'); lis1.push('</div>');
lis1.push('<hr class="layui-border-black">')
pre4 += result.length; pre4 += result.length;
//执行下一页渲染,第二参数为:满足“加载更多”的条件,即后面仍有分页 //执行下一页渲染,第二参数为:满足“加载更多”的条件,即后面仍有分页
//pages为Ajax返回的总页数,只有当前页小于总页数的情况下,才会继续出现加载更多 //pages为Ajax返回的总页数,只有当前页小于总页数的情况下,才会继续出现加载更多
@ -258,7 +254,6 @@
} }
lis.push("</div>"); lis.push("</div>");
lis.push('<hr class="layui-border-black">');
pre2 += result.length; pre2 += result.length;
//执行下一页渲染,第二参数为:满足“加载更多”的条件,即后面仍有分页 //执行下一页渲染,第二参数为:满足“加载更多”的条件,即后面仍有分页
//pages为Ajax返回的总页数,只有当前页小于总页数的情况下,才会继续出现加载更多 //pages为Ajax返回的总页数,只有当前页小于总页数的情况下,才会继续出现加载更多
@ -298,7 +293,6 @@
} }
lis.push("</div>") lis.push("</div>")
lis.push('<hr class="layui-border-black">');
pre2 += result.length; pre2 += result.length;
//执行下一页渲染,第二参数为:满足“加载更多”的条件,即后面仍有分页 //执行下一页渲染,第二参数为:满足“加载更多”的条件,即后面仍有分页
//pages为Ajax返回的总页数,只有当前页小于总页数的情况下,才会继续出现加载更多 //pages为Ajax返回的总页数,只有当前页小于总页数的情况下,才会继续出现加载更多

2
src/main/resources/templates/pages/company/company_add.html

@ -18,7 +18,7 @@
<div class="layui-card"> <div class="layui-card">
<div class="layui-card-body" style="padding-top: 40px;"> <div class="layui-card-body" style="padding-top: 40px;">
<div> <div>
<form class="layui-form" lay-filter="form1" style="margin: 0 auto;max-width: 460px;padding-top: 100px; padding-bottom: 200px"> <form class="layui-form layui-form-pane" lay-filter="form1" style="margin: 0 auto;max-width: 460px;padding-top: 100px; padding-bottom: 200px">
<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">

2
src/main/resources/templates/pages/company/company_edit.html

@ -12,7 +12,7 @@
</head> </head>
<body> <body>
<form class="layui-form" action="" > <form class="layui-form layui-form-pane" action="" >
<div class="layui-form-item" style="display: none"> <div class="layui-form-item" style="display: none">
<label class="layui-form-label">Id</label> <label class="layui-form-label">Id</label>
<div class="layui-input-block"> <div class="layui-input-block">

2
src/main/resources/templates/pages/material/material-add.html

@ -43,7 +43,7 @@
<div class="layui-card"> <div class="layui-card">
<div class="layui-card-body" style="padding-left:0px;padding-right:0px"> <div class="layui-card-body" style="padding-left:0px;padding-right:0px">
<div> <div>
<form class="layui-form" <form class="layui-form layui-form-pane"
style="margin: 0 auto;max-width: 700px;padding-top: 5px; padding-bottom: 50px" lay-filter="form1"> style="margin: 0 auto;max-width: 700px;padding-top: 5px; padding-bottom: 50px" lay-filter="form1">
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">物料名称:</label> <label class="layui-form-label">物料名称:</label>

2
src/main/resources/templates/pages/material/material-view.html

@ -36,7 +36,7 @@
<body> <body>
<form class="layui-form" action=""> <form class="layui-form layui-form-pane" action="">
<input type="text" id="barCodeList" style="display:none;"> <input type="text" id="barCodeList" style="display:none;">
<div class="layui-form-item" style="display: none"> <div class="layui-form-item" style="display: none">
<label class="layui-form-label">物料编号</label> <label class="layui-form-label">物料编号</label>

2
src/main/resources/templates/pages/materialtype/materialType_add.html

@ -19,7 +19,7 @@
<div class="layui-card"> <div class="layui-card">
<div class="layui-card-body" style="padding-top: 40px;"> <div class="layui-card-body" style="padding-top: 40px;">
<div> <div>
<form class="layui-form" lay-filter="form1" style="margin: 0 auto;max-width: 460px;padding-top: 100px; padding-bottom: 200px"> <form class="layui-form layui-form-pane" lay-filter="form1" style="margin: 0 auto;max-width: 460px;padding-top: 100px; padding-bottom: 200px">
<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">

2
src/main/resources/templates/pages/materialtype/materialType_edit.html

@ -12,7 +12,7 @@
</head> </head>
<body> <body>
<form class="layui-form" action="" > <form class="layui-form layui-form-pane" action="" >
<div class="layui-form-item" style="display:none;"> <div class="layui-form-item" style="display:none;">
<label class="layui-form-label">类型编号</label> <label class="layui-form-label">类型编号</label>
<div class="layui-input-block"> <div class="layui-input-block">

8
src/main/resources/templates/pages/other/welcome_mobile.html

@ -55,7 +55,7 @@
</div> </div>
<div class="panel-content"> <div class="panel-content">
<h1 class="no-margins" th:text="${depositoryCount}" >4</h1> <h1 class="no-margins" th:text="${depositoryCount}" >4</h1>
<small>当前分类总记录数</small> <small>当前仓库总记录数</small>
</div> </div>
</div> </div>
</div> </div>
@ -69,7 +69,7 @@
</div> </div>
<div class="panel-content"> <div class="panel-content">
<h1 class="no-margins" th:text="${allPrice}" >12032</h1> <h1 class="no-margins" th:text="${allPrice}" >12032</h1>
<small>当前分类总记录</small> <small>当前库存总</small>
</div> </div>
</div> </div>
</div> </div>
@ -83,7 +83,7 @@
</div> </div>
<div class="panel-content"> <div class="panel-content">
<h1 class="no-margins" th:text="${allMaterial}"></h1> <h1 class="no-margins" th:text="${allMaterial}"></h1>
<small>当前分类总记录数</small> <small>当前物料总记录数</small>
</div> </div>
</div> </div>
</div> </div>
@ -97,7 +97,7 @@
</div> </div>
<div class="panel-content"> <div class="panel-content">
<h1 class="no-margins" th:text="${warehouseRecord}"></h1> <h1 class="no-margins" th:text="${warehouseRecord}"></h1>
<small>当前分类总记录数</small> <small>当前流水总记录数</small>
</div> </div>
</div> </div>
</div> </div>

2
src/main/resources/templates/pages/post/post-view.html

@ -12,7 +12,7 @@
</head> </head>
<body> <body>
<form class="layui-form" action="" > <form class="layui-form layui-form-pane" action="" >
<div class="layui-form-item" style="display: none"> <div class="layui-form-item" style="display: none">
<label class="layui-form-label">Id</label> <label class="layui-form-label">Id</label>
<div class="layui-input-block"> <div class="layui-input-block">

4
src/main/resources/templates/pages/stockTaking/stockTakingReview.html

@ -226,9 +226,9 @@
<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">
<textarea id="auditOpinion" name="auditOpinion" <input id="auditOpinion" name="auditOpinion"
placeholder="请填写相关原因及申请原因" value="" placeholder="请填写相关原因及申请原因" value=""
class="layui-textarea"></textarea> class="layui-input"/>
</div> </div>
</div> </div>
<div class="layui-row layui-col-space15"> <div class="layui-row layui-col-space15">

2
src/main/resources/templates/pages/user/login.html

@ -35,7 +35,7 @@
<div class="layui-container"> <div class="layui-container">
<div class="admin-login-background"> <div class="admin-login-background">
<div class="layui-form login-form"> <div class="layui-form login-form">
<form class="layui-form" action=""> <form class="layui-form layui-form-pane" action="">
<input name="userWxId" type="text" th:value="${userWxId}" style="display:none;"> <input name="userWxId" type="text" th:value="${userWxId}" style="display:none;">
<div class="layui-form-item logo-title"> <div class="layui-form-item logo-title">
<h1>仓库管理系统登录</h1> <h1>仓库管理系统登录</h1>

2
src/main/resources/templates/pages/user/login_back.html

@ -35,7 +35,7 @@
<div class="layui-container"> <div class="layui-container">
<div class="admin-login-background"> <div class="admin-login-background">
<div class="layui-form login-form"> <div class="layui-form login-form">
<form class="layui-form" action=""> <form class="layui-form layui-form-pane" action="">
<div class="layui-form-item logo-title"> <div class="layui-form-item logo-title">
<h1>仓库管理系统登录</h1> <h1>仓库管理系统登录</h1>
</div> </div>

6
src/main/resources/templates/pages/warehouse/depository_add.html

@ -18,7 +18,7 @@
<div class="layui-card"> <div class="layui-card">
<div class="layui-card-body" style="padding-top: 40px;"> <div class="layui-card-body" style="padding-top: 40px;">
<div> <div>
<form class="layui-form" <form class="layui-form layui-form-pane"
style="margin: 0 auto;max-width: 700px;padding-top: 100px; padding-bottom: 200px" lay-filter="form1"> style="margin: 0 auto;max-width: 700px;padding-top: 100px; padding-bottom: 200px" lay-filter="form1">
<div class="layui-form-item"> <div class="layui-form-item">
<label class="layui-form-label">仓库名称:</label> <label class="layui-form-label">仓库名称:</label>
@ -61,8 +61,8 @@
<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">
<textarea name="introduce" placeholder="请填写仓库介绍..." <input name="introduce" placeholder="请填写仓库介绍..."
class="layui-textarea"></textarea> class="layui-input"/>
</div> </div>
</div> </div>
<div class="layui-form-item"> <div class="layui-form-item">

2
src/main/resources/templates/pages/warehouse/warehouse_view.html

@ -12,7 +12,7 @@
</head> </head>
<body> <body>
<form class="layui-form" action="" > <form class="layui-form layui-form-pane" action="" >
<div class="layui-form-item" style="display: none"> <div class="layui-form-item" style="display: none">
<label class="layui-form-label">仓库编号</label> <label class="layui-form-label">仓库编号</label>
<div class="layui-input-block"> <div class="layui-input-block">

294
src/test/java/com/dreamchaser/depository_manage/TestForDepositoryTree.java

@ -0,0 +1,294 @@
package com.dreamchaser.depository_manage;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
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.mapper.DepositoryMapper;
import com.dreamchaser.depository_manage.mapper.PlaceMapper;
import com.dreamchaser.depository_manage.service.impl.DepositoryServiceImpl;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.*;
import java.util.concurrent.*;
@SpringBootTest
@RunWith(SpringRunner.class)
public class TestForDepositoryTree {
@Autowired
DepositoryMapper depositoryMapper;
@Autowired
PlaceMapper placeMapper;
@Test
public void test(){
List<Object> objectList1 = InitTreeMenus("116");
System.out.println(objectList1);
}
public List<Object> InitTreeMenus(String adminorg) {
// 定义结果集
List<Object> list = new ArrayList<>();
// 定义仓库id列表
List<Integer> depositoryIdList = new ArrayList<>();
// 获取所有仓库
List<Depository> depositoryAll = depositoryMapper.findDepositoryAll();
Integer totalVal = depositoryAll.size();
// 定义分页数量
double size = 10.0;
// 定义线程数
Integer threadSize = (int) Math.ceil(totalVal / size);
// 定义开启线程数目
Integer openThreadSize = 0;
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize);
// 线程结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
for (int i = 0; i < depositoryAll.size(); i++) {
// 获取当前类型
Depository depository = depositoryAll.get(i);
if (((i + 1) % 100) == 0) { // 如果有100个开启线程进行处理
depositoryIdList.add(depository.getId());
Future<Object> future = completionService.submit(new Task(depositoryIdList,adminorg));
openThreadSize++;
futureList.add(future); // 添加到结果集
depositoryIdList = new ArrayList<>(); // 情况列表
} else {
// 添加id到列表中
depositoryIdList.add(depository.getId());
}
}
if (depositoryIdList.size() > 0) {
// 如果有剩余,开启线程进行处理
Future<Object> future = completionService.submit(new Task(depositoryIdList,adminorg));
futureList.add(future);
openThreadSize++;
}
// 3.获取结果
for (int i = 0; i < openThreadSize; i++) {
Object result = null;
try {
result = completionService.take().get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
list.addAll((Collection<?>) result);
}
exs.shutdown();
for (int i = 0; i < list.size(); i++) {
JSONObject jsonObject = new JSONObject((Map<String, Object>) list.get(i));
Integer parentId = jsonObject.getInteger("parentId");
if(Integer.compare(parentId,0) != 0) {
if (!checkList(list, parentId)) {
// 如果当前列表中不存在其父级
Depository depositoryById = depositoryMapper.findDepositoryById(parentId);
list.add(InitTreeMenus2(depositoryById, new ArrayList<>()));
}
}
}
return list;
}
// 用于执行线程任务
class Task implements Callable<Object> {
// 仓库
List<Integer> depositoryIdList;
// 部门
String adminorg;
public Task(List<Integer> depositoryIdList,String adminorg){
this.depositoryIdList = depositoryIdList;
this.adminorg = adminorg;
}
@Override
public Object call() throws Exception {
/**
* 获取当前仓库id对应的仓库
*/
List<Depository> depositories = depositoryMapper.selectDepositoryByIds(depositoryIdList);
// 定义树结构结果集
List<Object> list = new ArrayList<>();
// 定义线程池
ExecutorService exs = Executors.newFixedThreadPool(depositories.size());
// 线程结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService用于获取结果
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
// 定义开启线程数
Integer openThreadSize = 0;
for (int i = 0; i < depositories.size(); i++) {
// 获取当前仓库信息
Depository depository = depositories.get(i);
if("".equals(adminorg) ){
Future<Object> submit = completionService.submit(new PlaceTask(depository));
futureList.add(submit);
openThreadSize++;
}else{
if(adminorg.equals(depository.getAdminorg())){
Future<Object> submit = completionService.submit(new PlaceTask(depository));
futureList.add(submit);
openThreadSize++;
}
}
}
for (int i = 0; i < openThreadSize; 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 PlaceTask implements Callable<Object>{
Depository d;
PlaceTask(Depository d){
this.d = d;
}
@Override
public Object call() throws Exception {
// 获取当前仓库下的库位
List<Object> objectList = AddPlaceByDid(d);
// 将其构造成对应的树形结构类型
Map<String, Object> map = InitTreeMenus2(d, objectList);
return map;
}
}
// 在仓库后添加库位信息
public List<Object> AddPlaceByDid(Depository d) {
if (d != null) {
// 获取当前仓库下的所有库位
List<Object> result = new ArrayList<>();
// 获取该仓库的排
List<Integer> placeXByDid = placeMapper.findPlaceXByDid(d.getId());
if (placeXByDid.size() > 0) {
for (int i = 1; i <= placeXByDid.get(0); i++) {
Map<String, Object> placeX = new HashMap<>();
placeX.put("title", "第" + i + "排货架");
placeX.put("id", -1);
Map<String, Object> param = new HashMap<>();
param.put("did", d.getId());
param.put("x", i);
List<Place> placeByCondition = placeMapper.findPlaceByCondition(param);
if (placeByCondition.size() > 0) {
List<Object> children = new ArrayList<>();
for (int k = 1; k <= placeByCondition.size(); k++) {
Map<String, Object> map = new HashMap<>();
map.put("title", placeByCondition.get(k - 1).getCode());
map.put("id", d.getId() + "-" + placeByCondition.get(k - 1).getId());
children.add(map);
}
placeX.put("children", children);
}
// 获取该仓库该排的列数
result.add(placeX);
}
}
return result;
} else {
return null;
}
}
// 构造树形组件数据模板
public Map<String, Object> InitTreeMenus2(Depository d, List<Object> children) {
if (d != null) {
Map<String, Object> map = new HashMap<>();
map.put("title", d.getDname());
map.put("id", d.getId());
map.put("children", children);
map.put("parentId",d.getParentId());
return map;
} else {
return null;
}
}
/**
* 用于构造树结构
* @param list 树列表
* @param parentId 父级id
* @return
*/
public List<Object> buildTree_New(List<Object> list,Integer parentId){
// 定义树结构
List<Object> result = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
// 构造为jsonObject类
JSONObject jsonObject = new JSONObject((Map<String, Object>) list.get(i));
// 获取当前父级id
Long parentId1 = jsonObject.getLong("parentId");
if(Long.compare(parentId,parentId1) == 0){ // 如果当前类型是其父类
List<Object> objectList = buildTree_New(list, jsonObject.getInteger("id")); // 获取当前类型的子类
JSONArray children = jsonObject.getJSONArray("children");
children.addAll(objectList);
result.add(jsonObject);
}
}
return result;
}
/**
* 判断当前父级id是否在列表中
* @param list
* @param parentId
* @return
*/
public Boolean checkList(List<Object> list,Integer parentId){
for (int i = 0; i < list.size(); i++) {
JSONObject jsonObject = new JSONObject((Map<String, Object>) list.get(i));
Integer pid = jsonObject.getInteger("id");
if(Integer.compare(pid,parentId) == 0){
return true;
}
}
return false;
}
}

1
src/test/java/com/dreamchaser/depository_manage/TestForMaterialTree.java

@ -67,6 +67,7 @@ public class TestForMaterialTree {
// 定义线程数 // 定义线程数
Integer threadSize = (int) Math.ceil(totalVal / size); Integer threadSize = (int) Math.ceil(totalVal / size);
// 开启对应数量的线程 // 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(threadSize); ExecutorService exs = Executors.newFixedThreadPool(threadSize);
// 树结构结果集 // 树结构结果集

163
src/test/java/com/dreamchaser/depository_manage/TestForMaterialTypeTree.java

@ -0,0 +1,163 @@
package com.dreamchaser.depository_manage;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.entity.Material;
import com.dreamchaser.depository_manage.entity.MaterialType;
import com.dreamchaser.depository_manage.mapper.MaterialTypeMapper;
import com.dreamchaser.depository_manage.service.MaterialTypeService;
import com.dreamchaser.depository_manage.service.impl.MaterialTypeServiceImpl;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import java.util.*;
import java.util.concurrent.*;
@SpringBootTest
@RunWith(SpringRunner.class)
public class TestForMaterialTypeTree {
@Autowired
MaterialTypeMapper materialTypeMapper;
@Test
public void Test(){
}
public List<Object> InitTreeMenus() {
// 获取所有物料类型
List<MaterialType> materialTypeAll = materialTypeMapper.findMaterialTypeAll();
// 物料总数
Integer totalVal = materialTypeAll.size();
// 定义分页数量
double size = 100.0;
// 定义线程数
Integer threadSize = (int) Math.ceil(totalVal / size);
// 定义开启线程数
Integer openThreadSize = 0;
// 开启对应数量的线程
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);
// 物料类型id列表
List<Long> materialTypeList = new ArrayList<>();
for (int i = 0; i < materialTypeAll.size(); i++) {
// 获取当前类型
MaterialType materialType = materialTypeAll.get(i);
if (((i + 1) % 100) == 0) { // 如果有100个开启线程进行处理
materialTypeList.add(materialType.getOldId());
Future<Object> future = completionService.submit(new TaskTest_New(materialTypeList));
openThreadSize++;
futureList.add(future); // 添加到结果集
materialTypeList = new ArrayList<>(); // 情况列表
} else {
// 添加id到列表中
materialTypeList.add(materialType.getOldId());
}
}
if (materialTypeList.size() > 0) {
// 如果有剩余,开启线程进行处理
Future<Object> future = completionService.submit(new TaskTest_New(materialTypeList));
futureList.add(future);
openThreadSize++;
}
// 3.获取结果
for (int i = 0; i < openThreadSize; i++) {
Object result = null;
try {
result = completionService.take().get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
list.addAll((Collection<?>) result);
}
exs.shutdown();
// 进行最终的封装
return list;
}
// 用于执行测试新算法
class TaskTest_New implements Callable<Object> {
// 待处理的物料类型id列表
List<Long> materialTypeIdList;
public TaskTest_New(List<Long> materialTypeByCondition) {
this.materialTypeIdList = materialTypeByCondition;
}
@Override
public Object call() throws Exception {
// 定义树结构结果集
List<Object> list = new ArrayList<>();
// 查询当前物料类型id列表中的物料类型
List<MaterialType> materialTypeByOldIds = materialTypeMapper.findMaterialTypeByOldIds(materialTypeIdList);
for (int i = 0; i < materialTypeByOldIds.size(); i++) {
MaterialType mt = materialTypeByOldIds.get(i);
Map<String, Object> map = InitTreeMenus(mt, new ArrayList<>());
list.add(map);
}
return list;
}
}
// 构造树形组件数据模板
public Map<String, Object> InitTreeMenus(MaterialType mt, List<Object> children) {
if (mt != null) {
Map<String, Object> map = new HashMap<>();
map.put("title", mt.getTname());
map.put("id", mt.getOldId());
map.put("parentId",mt.getParentId());
map.put("children",children);
return map;
} else {
return null;
}
}
/**
* 用于构造树结构
* @param list 树列表
* @param parentId 父级id
* @return
*/
public List<Object> buildTree_New(List<Object> list,Long parentId){
// 定义树结构
List<Object> result = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
// 构造为jsonObject类
JSONObject jsonObject = new JSONObject((Map<String, Object>) list.get(i));
// 获取当前父级id
Long parentId1 = jsonObject.getLong("parentId");
if(Long.compare(parentId,parentId1) == 0){ // 如果当前类型是其父类
List<Object> objectList = buildTree_New(list, jsonObject.getLong("id")); // 获取当前类型的子类
JSONArray children = jsonObject.getJSONArray("children");
children.addAll(objectList);
result.add(jsonObject);
}
}
return result;
}
}
Loading…
Cancel
Save