Browse Source

优化物料选择页面

lwx_dev
erdanergou 3 years ago
parent
commit
0ff9247b69
  1. 64
      src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java
  2. 49
      src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
  3. 13
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java
  4. 13
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml
  5. 10
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialTypeMapper.java
  6. 13
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialTypeMapper.xml
  7. 13
      src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java
  8. 426
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java
  9. 3
      src/main/resources/templates/pages/application/application-in.html
  10. 3
      src/main/resources/templates/pages/application/application-in_scanQrCode.html
  11. 33
      src/main/resources/templates/pages/application/application-out.html
  12. 3
      src/main/resources/templates/pages/application/application-out_scanQrCode.html
  13. 34
      src/main/resources/templates/pages/application/application-transfer.html
  14. 3
      src/main/resources/templates/pages/application/application-transfer_back.html
  15. 105
      src/main/resources/templates/pages/material/selectMaterialByApproval.html
  16. 3
      src/main/resources/templates/pages/stockTaking/stockTaking.html
  17. 199
      src/test/java/com/dreamchaser/depository_manage/Test.java
  18. 13
      target/classes/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml
  19. 13
      target/classes/com/dreamchaser/depository_manage/mapper/MaterialTypeMapper.xml
  20. 3
      target/classes/templates/pages/application/application-in.html
  21. 105
      target/classes/templates/pages/material/selectMaterialByApproval.html

64
src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java

@ -8,20 +8,19 @@ import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.pojo.*;
import com.dreamchaser.depository_manage.security.bean.UserToken;
import com.dreamchaser.depository_manage.service.DepositoryService;
import com.dreamchaser.depository_manage.service.MaterialService;
import com.dreamchaser.depository_manage.service.PlaceService;
import com.dreamchaser.depository_manage.service.RoleService;
import com.dreamchaser.depository_manage.service.*;
import com.dreamchaser.depository_manage.utils.CrudUtil;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import com.sun.mail.imap.protocol.ID;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.*;
/**
@ -46,6 +45,12 @@ public class MaterialController {
@Autowired
private RedisTemplate<Object, Object> redisTemplate;
@Autowired
private RedisTemplate<String, String> redisTemplateForString;
@Autowired
private MaterialTypeService materialTypeService;
/**
* 根据物料进行查询
*
@ -192,7 +197,7 @@ public class MaterialController {
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
Integer maindeparment = userToken.getMaindeparment();
List<Object> list = new ArrayList<>();
if ("1".equals(type)) {
/*if ("1".equals(type)) {
list = materialService.InitTreeMenus(mname);
} else if ("2".equals(type)) {
list = materialService.InitTreeMenus(mname, String.valueOf(maindeparment));
@ -201,11 +206,20 @@ public class MaterialController {
String placeId = (String) map.get("placeId");
list = materialService.InitTreeMenus(mname, depositoryId, placeId);
}else if("4".equals(type)){
list = materialService.InitTreeMenus_Test(mname);
}
list = materialService.InitTreeMenus_Test();
}*/
list = materialService.InitTreeMenus_Test();
return new RestResponse(list);
}
// 每天凌晨0点执行一次
@Scheduled(cron = "0 0 0 * * ?")
private void getTransData() throws Exception {
materialService.InitTreeMenus_Test();
// bankDataService.insertTD();
}
/**
* 根据id获取物料
*
@ -684,8 +698,7 @@ public class MaterialController {
Map<String, Object> param = new HashMap<>();
Object pid = map.get("placeId");
String placeId = "0";
if(pid != null)
{
if (pid != null) {
placeId = pid.toString();
}
@ -1276,6 +1289,7 @@ public class MaterialController {
/**
* 用于查询当前扫描的二维码为仓库还是物料
*
* @param map
* @param request
* @return
@ -1335,4 +1349,36 @@ public class MaterialController {
result.put("flag", flag);
return new RestResponse(result);
}
/**
* 用于再次获取新数据
*
* @param map
* @return
*/
@PostMapping("/getNewTreeForMtId")
public RestResponse getNewTreeForMtId(@RequestBody Map<String, Object> map, HttpServletRequest request) {
String mname = (String) map.get("mname");
String type = (String) map.get("type");
UserByPort userToken = (UserByPort) request.getAttribute("userToken");
Integer maindeparment = userToken.getMaindeparment();
Object mtId = map.get("mtId");
List<Object> list = new ArrayList<>();
if (mtId != null) {
if("2".equals(type)){
map.put("adminorg",String.valueOf(maindeparment));
}else if("3".equals(type)){
String depositoryId = (String) map.get("depositoryId");
String placeId = (String) map.get("placeId");
map.put("depositoryId", depositoryId);
map.put("placeId", placeId);
}
list = materialService.AddInitTreeMenus(map);
} else {
throw new MyException("缺少必要参数");
}
return new RestResponse(list);
}
}

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

@ -84,8 +84,6 @@ public class PageController {
private StockTakingService stockTakingService;
public static JSONObject Captcha(HttpServletRequest request) {
UserByPort userByPort = (UserByPort) request.getAttribute("userToken");
String url = PortConfig.external_url_6666 + "/base/captcha";
@ -112,9 +110,9 @@ public class PageController {
}
/**
* 用于正常登录
*
* @param request
* @return
*/
@ -132,20 +130,31 @@ public class PageController {
}
@GetMapping("/getMaterialAll")
public ModelAndView getMaterialAll(String mname,String type,String clickObj){
public ModelAndView getMaterialAll(@RequestParam Map<String, Object> map) {
ModelAndView mv = new ModelAndView();
mv.addObject("mname",mname);
mv.addObject("type",type);
mv.addObject("clickObj",clickObj);
mv.addObject("mname", map.get("mname"));
mv.addObject("type", map.get("type"));
mv.addObject("clickObj", map.get("clickObj"));
Object depositoryId = map.get("depositoryId");
if (depositoryId != null) {
mv.addObject("depositoryId", depositoryId);
} else {
mv.addObject("depositoryId", -1);
}
Object placeId = map.get("placeId");
if (placeId != null) {
mv.addObject("placeId", placeId);
} else {
mv.addObject("placeId", -1);
}
mv.setViewName("pages/material/selectMaterialByApproval");
return mv;
}
@GetMapping("/index")
public ModelAndView index(HttpServletRequest request) {
ModelAndView mv = new ModelAndView();
@ -455,7 +464,6 @@ public class PageController {
}
@GetMapping("material_view")
public ModelAndView material_view(Integer id, HttpServletRequest request) {
ModelAndView mv = new ModelAndView();
@ -643,6 +651,7 @@ public class PageController {
/**
* 入库可视化
*
* @return
*/
@GetMapping("chart_in_back")
@ -697,6 +706,7 @@ public class PageController {
/**
* 根据条件查询用户
*
* @param map
* @return
*/
@ -941,6 +951,7 @@ public class PageController {
mv.setViewName("pages/user/userRole");
return mv;
}
@GetMapping("/postRoleView")
public ModelAndView findPostRoleView(Integer id) {
ModelAndView mv = new ModelAndView();
@ -1258,8 +1269,6 @@ public class PageController {
}
@GetMapping("/StockTakingReview")
public ModelAndView StockTakingReview(Integer id, HttpServletRequest request) {
ModelAndView mv = new ModelAndView();
@ -1526,7 +1535,6 @@ public class PageController {
}
public static List<AdministrationP> findCompanyBySuperior(String superior, UserByPort userByPort) {
String url = PortConfig.external_url + "/org/govlist";
Map<String, Object> map = new HashMap<>();
@ -1706,11 +1714,13 @@ public class PageController {
public String scanQrCode() {
return "pages/scanQrCode/ScanQrCode";
}
// 跳转到扫码入库界面
@GetMapping("/scanQrCodeIn")
public String scanQrCodeIn() {
return "pages/scanQrCode/ScanQrCodeIn";
}
// 用于扫码条形码
@GetMapping("/scanBarCode")
public String scanBarCode() {
@ -1726,16 +1736,19 @@ public class PageController {
mv.addObject("placeId", placeId);
return mv;
}
// 用于扫码条形码
@GetMapping("/scanBarCodeByNew")
public String scanBarCodeByNew() {
return "pages/scanQrCode/ScanBarCodeByNew";
}
// 用于扫码条形码进行盘点物料
@GetMapping("/scanBarCodeForTaking")
public String scanBarCodeForTaking() {
return "pages/scanQrCode/ScanBarCodeForTaking";
}
// 跳转到扫码出库界面
@GetMapping("/scanQrCodeByOut")
public ModelAndView scanQrCodeByOut(Integer id, HttpServletRequest request) {
@ -1748,6 +1761,7 @@ public class PageController {
mv.addObject("record", applicationOutMinById);
return mv;
}
// 跳转到新扫码出库界面
@GetMapping("/scanBarOrQrCodeOut")
public ModelAndView scanBarOrQrCodeOut(Integer id, HttpServletRequest request) {
@ -1760,6 +1774,7 @@ public class PageController {
mv.addObject("record", applicationOutMinById);
return mv;
}
@GetMapping("/scanQrCodeTransfer")
public ModelAndView scanQrCodeTransfer(HttpServletRequest request) {
ModelAndView mv = new ModelAndView();
@ -1817,7 +1832,7 @@ public class PageController {
public ModelAndView applicationInByMaterial(HttpServletRequest request) {
ModelAndView mv = new ModelAndView();
UserByPort userByPort = (UserByPort) request.getAttribute("userToken");
String scanQrCodeValue = (String)redisTemplate.opsForValue().get("temporaryValueForMaterial"+userByPort.getNumber()).toString();
String scanQrCodeValue = redisTemplate.opsForValue().get("temporaryValueForMaterial" + userByPort.getNumber()).toString();
redisTemplate.delete("temporaryValueForMaterial" + userByPort.getNumber());
JSONObject jsonObject = JSONObject.parseObject(scanQrCodeValue);
JSONArray mids = (JSONArray) jsonObject.get("mids");
@ -1937,7 +1952,6 @@ public class PageController {
StockTakingChildP stcp = stockTakingService.findStockTakingChildPById(ObjectFormatUtil.toInteger(minRecordId));
// 获取主订单
stockTaking = stockTakingService.findStockTakingById(stcp.getMainId());
@ -1969,7 +1983,6 @@ public class PageController {
}
@GetMapping("/scanCodeByTaking")
public ModelAndView scanCodeByTaking() {
ModelAndView mv = new ModelAndView();
@ -1978,6 +1991,4 @@ public class PageController {
}
}

13
src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java

@ -215,7 +215,20 @@ public interface MaterialMapper {
Integer deleteBarCodeAndMaterial(Map<String,Object> map);
/**
* 查询当前类型下的物料
* @param oldId
* @return
*/
List<Material> findMaterialByType(Long oldId);
/**
* 批量查询当前类型下的物料
* @param list
* @return
*/
List<Material> findMaterialByTypeIds(List<Long> list);
}

13
src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml

@ -245,6 +245,19 @@
</foreach>
</select>
<select id="findMaterialByTypeIds" resultMap="materialMap" parameterType="list">
SELECT
<include refid="allColumns" />
from material m
where m.type_id in
<foreach collection="list" index="index" item="item" open="("
separator="," close=")">
#{item}
</foreach>
and state = 1;
</select>
<select id="findMaterialByDepositorysAndType" resultMap="materialMap" parameterType="map">
SELECT
<include refid="allColumns" />

10
src/main/java/com/dreamchaser/depository_manage/mapper/MaterialTypeMapper.java

@ -42,6 +42,8 @@ public interface MaterialTypeMapper {
*/
MaterialType findMaterialTypeByOldId(Long oldId);
/**
* 根据id查询物料名称
* @param id 物料类型id
@ -134,4 +136,12 @@ public interface MaterialTypeMapper {
*/
List<MaterialType> findMaterialTypeByParent(Long parentId);
/**
* 根据主键批量获取数据
* @param list
* @return
*/
List<MaterialType> findMaterialTypeByOldIds(List<Long> list);
}

13
src/main/java/com/dreamchaser/depository_manage/mapper/MaterialTypeMapper.xml

@ -103,6 +103,19 @@
WHERE mt.parentId = #{parentId}
</select>
<!-- 根据主键批量获取数据 -->
<select id="findMaterialTypeByOldIds" resultMap="materialTypeMap" parameterType="list">
SELECT
<include refid="allColumns" />
FROM material_type mt
WHERE mt.oldId in
<foreach collection="list" index="index" item="item" open="("
separator="," close=")">
#{item}
</foreach>
</select>
<!-- 根据主键查询数据 -->
<select id="findMaterialTypeById" resultMap="materialTypeMap" parameterType="integer">
SELECT

13
src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java

@ -161,7 +161,7 @@ public interface MaterialService {
* 构造树形选择框(测试)
* @return
*/
List<Object> InitTreeMenus_Test(String mname);
List<Object> InitTreeMenus_Test();
/**
* 根据仓库查询物品
@ -259,5 +259,16 @@ public interface MaterialService {
String findMaterialCodeByQrCode(String qrCode);
/**
* 添加新树形选择框
* @return
*/
List<Object> AddInitTreeMenus(Map<String,Object> map);
/**
* 用于判断当前类型是几级子类
* @param mt
* @return
*/
Integer getMtLevel(MaterialType mt,Integer level);
}

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

@ -1,5 +1,8 @@
package com.dreamchaser.depository_manage.service.impl;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.entity.*;
import com.dreamchaser.depository_manage.mapper.DepositoryMapper;
import com.dreamchaser.depository_manage.mapper.MaterialMapper;
@ -10,14 +13,18 @@ import com.dreamchaser.depository_manage.pojo.PlaceP;
import com.dreamchaser.depository_manage.service.MaterialService;
import com.dreamchaser.depository_manage.service.PlaceService;
import com.dreamchaser.depository_manage.service.RoleService;
import com.dreamchaser.depository_manage.utils.DateUtil;
import com.dreamchaser.depository_manage.utils.ObjectFormatUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.math.BigDecimal;
import java.sql.Time;
import java.util.*;
import java.util.concurrent.*;
import java.util.logging.Level;
/**
* @author Dreamchaser
@ -38,6 +45,11 @@ public class MaterialServiceImpl implements MaterialService {
@Autowired
QrCodeMapper qrCodeMapper;
@Autowired
RedisTemplate<String, String> redisTemplate;
/**
* 增加一条库存记录
*
@ -103,12 +115,12 @@ public class MaterialServiceImpl implements MaterialService {
}
return materialMapper.updateMaterial(map);
}
/**
* 根据id删除一条库存记录
*
* @param id 库存id
* @return 受影响的行数
*/
@ -119,6 +131,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 根据条件查询符合条件的库存信息
*
* @param map 条件map
* @return 符合条件的库存信息
*/
@ -162,6 +175,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 根据条件查询符合条件的库存信息
*
* @param map 条件map
* @return 符合条件的库存信息
*/
@ -201,6 +215,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 根据条件查询符合条件的库存总数
*
* @param map
* @return
*/
@ -211,6 +226,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 根据编码获取对应物料
*
* @return
*/
@Override
@ -223,6 +239,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 查询所有的库存信息
*
* @return 所有的库存信息
*/
@Override
@ -237,6 +254,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 根据id查询库存信息
*
* @param id 库存id
* @return 库存信息
*/
@ -252,6 +270,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 根据id查询库存信息
*
* @param id 库存id
* @return 库存信息
*/
@ -265,6 +284,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 根据id批量查询库存信息
*
* @param ids 库存id集合
* @return 库存信息
*/
@ -278,6 +298,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 查询所有库存条数
*
* @return 库存记录的行数
*/
@Override
@ -287,6 +308,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 根据条件返回符合条件的库存记录行数
*
* @param map 条件map
* @return 符合条件的记录行数
*/
@ -297,6 +319,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 根据主键Id将物料状态改为删除
*
* @param id
* @return 受影响条数
*/
@ -307,6 +330,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 根据主键id批量将物料状态改为删除
*
* @param ids
* @return 受影响条数
*/
@ -317,6 +341,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 计算所有仓库未删除总额
*
* @return
*/
@Override
@ -333,6 +358,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 根据条件修改状态
*
* @param map
* @return
*/
@ -344,6 +370,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 对查出来的记录进行包装包装成前端需要的数据
*
* @param list DepositoryRecord集合
* @return 包装好的集合
*/
@ -365,9 +392,9 @@ public class MaterialServiceImpl implements MaterialService {
}
/**
* 根据仓库查询物品
*
* @param dids
* @return
*/
@ -501,6 +528,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 通过条形码获取物料信息
*
* @param barCode
* @return
*/
@ -517,6 +545,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 通过条件获取条形码与物料的对应关系
*
* @param map
* @return
*/
@ -527,6 +556,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 通过条件获取条形码与物料的对应关系数量
*
* @param map
* @return
*/
@ -538,6 +568,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 通过条形码与仓库编码获取对应关系
*
* @param map
* @return
*/
@ -554,6 +585,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 用于添加条形码与物料编码的对应关系
*
* @param map
* @return
*/
@ -570,6 +602,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 用于删除条形码与物料的对应关系
*
* @param map
* @return
*/
@ -588,6 +621,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 根据物料编码获取与二维码的对应关系
*
* @param Mcode
* @return
*/
@ -598,6 +632,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 根据二维码获取对应的物料编码
*
* @param qrCode
* @return
*/
@ -606,8 +641,226 @@ public class MaterialServiceImpl implements MaterialService {
return qrCodeMapper.findMaterialCodeByQrCode(qrCode);
}
/**
* 添加新树形选择框
*
* @return
*/
@Override
public List<Object> AddInitTreeMenus(Map<String, Object> map) {
Integer mtId = ObjectFormatUtil.toInteger(map.get("mtId"));
List<Object> result = new ArrayList<>();
MaterialType mt = materialTypeMapper.findMaterialTypeById(mtId);
List<MaterialType> materialTypeByParent = materialTypeMapper.findMaterialTypeByParent(mt.getOldId());
// 获取当前类别级别
Integer mtLevel = getMtLevel(mt, 1);
if(materialTypeByParent.size() > 0) {
String mname = "";
Object o = map.get("mname");
if (o != null) {
mname = o.toString();
}
Object o1 = map.get("adminorg");
String adminorg = "";
if (o1 != null) {
adminorg = o1.toString();
}
List<Object> childForMaterialTypeByParent = findChildForMaterialTypeByParent_Test(mt.getOldId(), mtLevel + 1, mtLevel + 1);
Map<String, Object> stringObjectMap = new HashMap<>();
if (childForMaterialTypeByParent != null) {
stringObjectMap = InitTreeMenusTest(mt, childForMaterialTypeByParent);
} else {
List<Object> materialByType = AddMaterialByType(mt, mname, adminorg);
stringObjectMap = InitTreeMenusTest(mt, materialByType);
}
MaterialType parentMt = mt;
for (int i = 0; i < mtLevel - 1; i++) {
parentMt = materialTypeMapper.findMaterialTypeByOldId(parentMt.getParentId());
}
List<String> objectList = redisTemplate.opsForList().range("wms_materialTree_result", 0, -1);
for (int i = 0; i < objectList.size(); i++) {
String s = objectList.get(i);
JSONObject jsonObject = JSONObject.parseObject(s);
Long id = Long.valueOf(jsonObject.getString("id"));
if (Long.compare(parentMt.getOldId(), id) == 0) {
jsonObject.put("spread", true);
stringObjectMap.put("spread", true);
if (mtLevel == 1) {
redisTemplate.opsForList().leftPop("wms_materialTree_result");
redisTemplate.opsForList().leftPush("wms_materialTree_result",JSONObject.toJSONString(jsonObject));
result.add(stringObjectMap);
continue;
} else {
List<Object> childList = (List<Object>) jsonObject.get("children");
List<Object> objectList1 = rewriteTree(childList, stringObjectMap, mtLevel - 1, mt);
jsonObject.put("children", objectList1);
redisTemplate.opsForList().leftPop("wms_materialTree_result");
redisTemplate.opsForList().leftPush("wms_materialTree_result",JSONObject.toJSONString(jsonObject));
result.add(jsonObject);
}
} else {
redisTemplate.opsForList().leftPop("wms_materialTree_result");
redisTemplate.opsForList().leftPush("wms_materialTree_result",JSONObject.toJSONString(jsonObject));
result.add(jsonObject);
}
}
return result;
}
else{
List<String> objectList = redisTemplate.opsForList().range("wms_materialTree_result", 0, -1);
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
MaterialType parent = mt;
for (int i = 0; i < mtLevel - 1; i++) {
parent = materialTypeMapper.findMaterialTypeByOldId(parent.getParentId());
}
for (int i = 0; i < objectList.size(); i++) {
String s = objectList.get(i);
JSONObject jsonObject = JSONObject.parseObject(s);
Long id = Long.valueOf(jsonObject.getString("id"));
if(Long.compare(id,parent.getOldId()) == 0){
jsonObject = setTreeChildrenSpreadIsTrue(jsonObject, mt, mtLevel - 1,map);
}
result.add(jsonObject);
}
return result;
}
}
public JSONObject setTreeChildrenSpreadIsTrue(JSONObject jsonObject,MaterialType mt,Integer level,Map<String,Object> map){
if(level != 0){
MaterialType parent = mt;
for (int i = 0; i < level - 1; i++) {
parent = materialTypeMapper.findMaterialTypeByOldId(parent.getParentId());
}
jsonObject.put("spread",true);
JSONArray children = jsonObject.getJSONArray("children");
for (int i = 0; i < children.size(); i++) {
JSONObject object = children.getJSONObject(i);
Long id = Long.valueOf(object.getString("id"));
if(Long.compare(id,parent.getOldId()) == 0){
JSONObject object1 = setTreeChildrenSpreadIsTrue(object, mt, level - 1,map);
children.set(i,object1);
}else{
List<Object> list = new ArrayList<>();
list.add(1);
object.put("children",list);
}
}
}else{
Object o2 = map.get("depositoryId");
String mname = "";
Object o = map.get("mname");
if (o != null) {
mname = o.toString();
}
if(o2 != null){
String depositoryId = o2.toString();
Object o3 = map.get("placeId");
String placeId = "";
if(o3 != null){
placeId = o3.toString();
}
List<Object> objectList = AddMaterialByType(mt, mname, depositoryId, placeId);
Map<String, Object> stringObjectMap = new HashMap<>();
stringObjectMap = InitTreeMenusTest(mt, objectList);
jsonObject = new JSONObject(stringObjectMap);
}else{
Object o1 = map.get("adminorg");
String adminorg = "";
if (o1 != null) {
adminorg = o1.toString();
}
List<Object> list = AddMaterialByType(mt,mname,adminorg);
Map<String, Object> stringObjectMap = new HashMap<>();
stringObjectMap = InitTreeMenusTest(mt, list);
jsonObject = new JSONObject(stringObjectMap);
}
}
return jsonObject;
}
/**
* 用于判断当前类型是几级子类
*
* @param mt
* @return
*/
public Integer getMtLevel(MaterialType mt, Integer level) {
// 查询当前父类
MaterialType materialTypeByOldId = materialTypeMapper.findMaterialTypeByOldId(mt.getParentId());
if (materialTypeByOldId == null) {
return level;
} else {
return getMtLevel(materialTypeByOldId, level + 1);
}
}
public List<Object> rewriteTree(List<Object> childrenList, Map<String, Object> stringObjectMap, Integer flag, MaterialType mt) {
if(flag != 1){
mt = materialTypeMapper.findMaterialTypeByOldId(mt.getParentId());
return rewriteTree(childrenList,stringObjectMap,flag-1,mt);
}else{
List<Object> list = new ArrayList<>();
Long somId = mt.getOldId();
for (int i = 0; i < childrenList.size(); i++) {
JSONObject jsonObject = (JSONObject) childrenList.get(i);
Long id = Long.valueOf(jsonObject.getString("id"));
if(Long.compare(somId,id)==0){
Long childrenId = Long.valueOf(stringObjectMap.get("id").toString());
if(Long.compare(childrenId,id) == 0){
list.add(stringObjectMap);
}else{
// 获取当前下的子列表
JSONArray children = jsonObject.getJSONArray("children");
List<Object> objectList = updateTreeChildren(children, stringObjectMap,childrenId);
jsonObject.put("children",objectList);
jsonObject.put("spread",true);
list.add(jsonObject);
}
}else{
list.add(jsonObject);
}
}
return list;
}
}
public List<Object> updateTreeChildren(List<Object> childrenList,Map<String,Object> map,Long mtId){
Long somId = Long.valueOf(map.get("id").toString());
List<Object> children = new ArrayList<>();
for (int i = 0; i < childrenList.size(); i++) {
JSONObject o = (JSONObject) childrenList.get(i);
Long id = Long.valueOf(o.getString("id"));
if(Long.compare(somId,id) == 0){
children.add(map);
}else{
children.add(o);
}
}
return children;
}
/**
* 构造树形选择框
*
* @return
*/
public List<Object> InitTreeMenus(String mname, String adminorg) {
@ -647,6 +900,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 构造树形选择框(盘点)
*
* @return
*/
@Override
@ -685,6 +939,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 构造树形选择框普通
*
* @return
*/
public List<Object> InitTreeMenus(String mname) {
@ -731,6 +986,7 @@ public class MaterialServiceImpl implements MaterialService {
this.mname = mname;
this.adminorg = adminorg;
}
@Override
public Object call() throws Exception {
List<Object> childForMaterialTypeByParent = findChildForMaterialTypeByParent(mt.getOldId(), mname, adminorg);
@ -758,6 +1014,7 @@ public class MaterialServiceImpl implements MaterialService {
this.placeId = placeId;
this.depositoryId = depositoryId;
}
@Override
public Object call() throws Exception {
List<Object> childForMaterialTypeByParent = findChildForMaterialTypeByParent(mt.getOldId(), mname, depositoryId, placeId);
@ -780,8 +1037,22 @@ public class MaterialServiceImpl implements MaterialService {
map.put("id", mt.getOldId());
map.put("children", children);
return map;
} else {
return null;
}
else{
}
// 构造树形组件数据模板
public Map<String, Object> InitTreeMenusTest(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("children", children);
map.put("spread", true);
return map;
} else {
return null;
}
}
@ -818,7 +1089,6 @@ public class MaterialServiceImpl implements MaterialService {
if (version == null) {
version = "";
}
String title = material.getMname() + ",规格型号: " + version;
if (material.getDepositoryId() != null) {
// 如果当前是库存
@ -848,8 +1118,7 @@ public class MaterialServiceImpl implements MaterialService {
}
}
return result;
}
else {
} else {
return null;
}
}
@ -923,8 +1192,7 @@ public class MaterialServiceImpl implements MaterialService {
}
}
return result;
}
else {
} else {
return null;
}
}
@ -1001,92 +1269,150 @@ public class MaterialServiceImpl implements MaterialService {
}
// 用于测试构造属性框
public List<Object> InitTreeMenus_Test(String mname){
List<MaterialType> materialTypeNoParent = materialTypeMapper.findMaterialTypeNoParent();
public List<Object> InitTreeMenus_Test() {
List<Object> list = new ArrayList<>();
// 获取当前仓库中物料数量
Double count = Double.valueOf(materialMapper.findCount());
// 设置要开启线程的数量
int size = materialTypeNoParent.size();
// 根据当前线程数量计算每个线程要查询的数量
int pageSize = (int) Math.ceil(count / size);
List<String> wms_materialTree_result = redisTemplate.opsForList().range("wms_materialTree_result", 0, -1);
if (wms_materialTree_result != null && wms_materialTree_result.size() != 0) {
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int i = 0; i < wms_materialTree_result.size(); i++) {
String s = wms_materialTree_result.get(i);
JSONObject jsonObject = JSONObject.parseObject(s);
list.add(jsonObject);
}
return list;
}
else {
List<MaterialType> materialTypeNoParent = materialTypeMapper.findMaterialTypeNoParent();
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(size);
ExecutorService exs = Executors.newFixedThreadPool(materialTypeNoParent.size());
// 结果集
List<Object> list = new ArrayList<>();
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
// 开启线程
for (int i = 0; i < size; i++) {
for (int i = 0; i < materialTypeNoParent.size(); i++) {
// 创建对应数量的线程
Future<Object> future = completionService.submit(new TaskTest(pageSize,i));
MaterialType materialType = materialTypeNoParent.get(i);
Future<Object> future = completionService.submit(new TaskTest(materialType, 1, 1));
futureList.add(future);
}
// 3.收集结果
for(int i=0;i<size;i++){
for (int i = 0; i < materialTypeNoParent.size(); i++) {
Object result = null;
try {
result = completionService.take().get();
redisTemplate.opsForList().leftPush("wms_materialTree_result", JSON.toJSONString(result));
redisTemplate.expire("wms_materialTree_result", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
list.addAll(Collections.singleton(result));
list.add(result);
}
return list;
}
}
// 用于测试新算法
// 用于执行测试新算法
class TaskTest implements Callable<Object> {
int size;
int page;
MaterialType mt;
Integer level;
Integer staticLevel;
public TaskTest(int size,int page){
this.size = size;
this.page = page;
public TaskTest(MaterialType mt, Integer level, Integer staticLevel) {
this.mt = mt;
this.level = level;
this.staticLevel = staticLevel;
}
@Override
public Object call() throws Exception {
List<MaterialType> byLimit = findMaterialTypeByLimit(page, size);
for (int i = 0; i < byLimit.size(); i++) {
MaterialType materialType = byLimit.get(i);
List<Object> childForMaterialTypeByParent = findChildForMaterialTypeByParent_Test(mt.getOldId(),1,1);
Map<String, Object> stringObjectMap = new HashMap<>();
if (childForMaterialTypeByParent != null) {
stringObjectMap = InitTreeMenus(mt, childForMaterialTypeByParent);
} else {
List<Object> materialByType = AddMaterialByType(mt, "", "");
stringObjectMap = InitTreeMenus(mt, materialByType);
}
return null;
return stringObjectMap;
}
}
// 构造对应的树形结构
public Map<String,Object> composeTreeStructure(MaterialType mt){
// 查询当前
// 构造树形组件数据模板
public Map<String, Object> InitTreeMenus_Test(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("children", children);
return map;
} else {
return null;
}
}
// 根据id获取子类(只获取类别)
public List<Object> findChildForMaterialTypeByParent_OnlyType(Long Oldid){
Map<String, Object> param = new HashMap<>();
List<Object> result = new ArrayList<>();
Map<String, Object> children = new HashMap<>();
param.put("parentId", Oldid);
// 获取当前父类的子类
List<MaterialType> materialTypeByCondition = materialTypeMapper.findMaterialTypeByCondition(param);
if (materialTypeByCondition.size() > 0) {
for (int i = 0; i < materialTypeByCondition.size(); i++) {
MaterialType mt = materialTypeByCondition.get(i);
List<Object> childForMaterialTypeByParent = findChildForMaterialTypeByParent_OnlyType(mt.getOldId());
result.add(InitTreeMenus(mt, childForMaterialTypeByParent));
}
return result;
} else {
return null;
}
}
// 用于分页查询物料
public List<MaterialType> findMaterialTypeByLimit(int page,int size){
Map<String,Object> map = new HashMap<>();
int start = size * page;
map.put("begin",start);
map.put("size",size);
List<MaterialType> materialTypeByCondition = materialTypeMapper.findMaterialTypeByCondition(map);
return materialTypeByCondition;
// 根据id获取子类
public List<Object> findChildForMaterialTypeByParent_Test(Long Oldid,int level,int staticlevel) {
Map<String, Object> param = new HashMap<>();
List<Object> result = new ArrayList<>();
param.put("parentId", Oldid);
// 获取当前父类的子类
List<MaterialType> materialTypeByCondition = materialTypeMapper.findMaterialTypeByCondition(param);
if(materialTypeByCondition.size() > 0 && (level == staticlevel)){
for (int i = 0; i < materialTypeByCondition.size(); i++) {
MaterialType mt = materialTypeByCondition.get(i);
List<Object> childForMaterialTypeByParent_test = findChildForMaterialTypeByParent_Test(mt.getOldId(),level+1,staticlevel);
Map<String, Object> stringObjectMap = null;
if(childForMaterialTypeByParent_test == null){
List<Object> list = new ArrayList<>();
list.add(1);
stringObjectMap = InitTreeMenus(mt, list);
} else {
stringObjectMap = InitTreeMenus(mt, childForMaterialTypeByParent_test);
}
result.add(stringObjectMap);
}
return result;
}else{
List<Object> childForMaterialTypeByParent_onlyType = findChildForMaterialTypeByParent_OnlyType(Oldid);
return childForMaterialTypeByParent_onlyType;
}
}
}

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

@ -532,7 +532,8 @@
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
content: '/selectMaterialByCard?mname=' + mname + '&type=1&clickObj=' + parentId,
// content: '/selectMaterialByCard?mname=' + mname + '&type=1&clickObj=' + parentId,
content: '/getMaterialAll?mname=' + mname + '&type=1&clickObj=' + parentId,
move: '.layui-layer-title',
fixed: false,
end: function () {

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

@ -668,7 +668,8 @@
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
content: '/selectMaterialByCard?mname=' + mname + '&type=1&clickObj=' + parentId,
// content: '/selectMaterialByCard?mname=' + mname + '&type=1&clickObj=' + parentId,
content: '/getMaterialAll?mname=' + mname + '&type=1&clickObj=' + parentId,
move: '.layui-layer-title',
fixed: false,
end: function () {

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

@ -575,6 +575,9 @@
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
var mname = materialName.value;
var barCodeChildren = parent.childNodes[9];
// 条形码条码
var barCodeItem = barCodeChildren.childNodes[3];
layer.open({
type: 2,
title: '弹窗内容',
@ -600,6 +603,36 @@
code = "";
}
codeValue.value = code;
var materialAndBarCodeList = material["materialAndBarCodeList"];
var idNumber = materialId.name.split("mid")[1];
if (materialAndBarCodeList.length > 0) {
// 如果有对应的条形码
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
var barCodeImg = barCodeItem.childNodes[1].childNodes[3];
var id = barCodeInput.id;
$("#" + id).remove();
$("#barCode" + idNumber).empty();
var barCode = $("#barCode" + idNumber);
if (barCode.length > 0) {
barCode.empty();
} else {
var barCodeSelect = `
<select id=` + "barCode" + idNumber + ` name=` + "barCode" + idNumber + `>
</select>`;
$("#" + barCodeImg.id).before(barCodeSelect);
}
form.render();
$.each(materialAndBarCodeList, function (index, item) {
$("#barCode" + idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
});
form.render();
}
else{
var barCode = $("#barCode" + idNumber);
if (barCode.length > 0) {
barCode.empty();
}
}
form.render();
}
});

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

@ -500,7 +500,8 @@
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
content: '/selectMaterialByCard?mname='+mname+'&type=2&clickObj='+parentId,
// content: '/selectMaterialByCard?mname='+mname+'&type=2&clickObj='+parentId,
content: '/getMaterialAll?mname='+mname+'&type=2&clickObj='+parentId,
move : '.layui-layer-title',
fixed:false,
end: function () {

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

@ -576,7 +576,6 @@
contentType: "application/json;charset=utf-8",
success:function (res) {
var idNumber = materialId.name.split("mid")[1];
console.log(idNumber)
// 获取物料与条形码的对应关系
var materialAndBarCodeList = d["materialAndBarCodeList"];
var barCode = $("#barCode" + idNumber);
@ -631,6 +630,8 @@
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
var mname = materialName.value;
var barCodeChildren = parent.childNodes[9];
var barCodeItem = barCodeChildren.childNodes[3];
layer.open({
type: 2,
title: '弹窗内容',
@ -638,7 +639,8 @@
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
content: '/selectMaterialByCard?mname='+mname+'&type=2&clickObj='+parentId,
// content: '/selectMaterialByCard?mname='+mname+'&type=2&clickObj='+parentId,
content: '/getMaterialAll?mname='+mname+'&type=2&clickObj='+parentId,
move : '.layui-layer-title',
fixed:false,
end: function () {
@ -660,6 +662,34 @@
$.each(placeList, function (index, item) {
$('#place').append(new Option(item.depositoryName+"-"+item.code, item.id));//往下拉菜单里添加元素
});
var barCode = $("#barCode" + idNumber);
if (barCode.length > 0) {
barCode.empty();
}
var idNumber = materialId.name.split("mid")[1];
var materialAndBarCodeList = material["materialAndBarCodeList"];
if (materialAndBarCodeList.length > 0) {
// 如果有对应的条形码
var barCodeInput = barCodeItem.childNodes[1].childNodes[1];
var barCodeImg = barCodeItem.childNodes[1].childNodes[3];
var id = barCodeInput.id;
$("#" + id).remove();
var barCode = $("#barCode" + idNumber);
if (barCode.length > 0) {
barCode.empty();
} else {
var barCodeSelect = `
<select id=` + "barCode" + idNumber + ` name=` + "barCode" + idNumber + `>
</select>`;
$("#" + barCodeImg.id).before(barCodeSelect);
}
form.render();
$.each(materialAndBarCodeList, function (index, item) {
$("#barCode" + idNumber).append(new Option(item.bmcode, item.id));//往下拉菜单里添加元素
});
form.render();
}
form.render();
}
});

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

@ -382,7 +382,8 @@
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
content: '/selectMaterialByCard?mname='+mname+'&type=2&clickObj='+parentId,
// content: '/selectMaterialByCard?mname='+mname+'&type=2&clickObj='+parentId,
content: '/getMaterialAll?mname='+mname+'&type=2&clickObj='+parentId,
move : '.layui-layer-title',
fixed:false,
end: function () {

105
src/main/resources/templates/pages/material/selectMaterialByApproval.html

@ -14,6 +14,8 @@
<input id="mname" name="mname" th:value="${mname}" style="display: none">
<input id="type" name="type" th:value="${type}" style="display: none">
<input id="clickObj" name="clickObj" th:value="${clickObj}" style="display: none">
<input id="placeId" name="placeId" th:value="${placeId}" style="display: none">
<input id="depositoryId" name="depositoryId" th:value="${depositoryId}" style="display: none">
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script>
layui.use(['form', 'layer', 'dropdown', 'tree'], function () {
@ -22,26 +24,54 @@
var mname = $("#mname").val();
var type = $("#type").val();
var clickObj = $("#clickObj").val();
var placeId = $("#placeId").val();
var depositoryId = $("#depositoryId").val();
// 用于暂存当前查询结果
var tempData = [];
var req = {};
req.mname = mname;
req.type = "4";
req.type = type;
if(placeId !== "-1"){
req.placeId = placeId;
req.depositoryId = depositoryId;
}
var test = tree.render({
elem: '#test2'
, data: []
, click: function (obj) {
console.log(obj)
var state = obj.state;
if (obj.data.children !== undefined) {
if("open" === state){
var id = obj.data.id;
var param = {};
param.mtId = id;
param.mname = mname;
param.type = type;
if(placeId !== "-1"){
param.placeId = placeId;
param.depositoryId = depositoryId;
}
addTreeChildren(param);
}else{
return false
}
}else{
var windowParent = $("#"+clickObj,window.parent.document)[0];
var children = windowParent.childNodes[5];
var materialItem = children.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
materialName.value = obj.data.title;
materialId.value = obj.data.id;
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
}
},
oncheck:function (obj) {
console.log(obj)
}
});
$.ajax({
@ -63,10 +93,67 @@
}
});
$(".layui-tree-iconClick").addEventListener("click",function (obj) {
console.log(obj)
})
$("#test2").on("click",".layui-tree-entry",function(event){
var target = $(event.target);
var id = this.parentNode.getAttribute("data-id");
var context = target.context.className;
if(context.includes("layui-tree-main")){
var childrenName = this.childNodes[0].childNodes[0].childNodes[0].className;
if(childrenName.includes("layui-icon-addition")){
// console.log("隐藏")
}else if(childrenName.includes("layui-icon-subtraction")){
var param = {};
param.mtId = id;
param.mname = mname;
param.type = type;
if(placeId !== "-1"){
param.placeId = placeId;
param.depositoryId = depositoryId;
}
addTreeChildren(param);
}
}else if(context.includes("layui-icon")){
if(context.includes("layui-icon-addition")){
// console.log("隐藏")
}else if(context.includes("layui-icon-subtraction")){
var param = {};
param.mtId = id;
param.mname = mname;
param.type = type;
if(placeId !== "-1"){
param.placeId = placeId;
param.depositoryId = depositoryId;
}
addTreeChildren(param);
}
}
});
// 用于添加分支
addTreeChildren = function(param) {
$.ajax({
url: "/material/getNewTreeForMtId",
data: JSON.stringify(param),
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (d) {
layer.close(this.layerIndex);
var data2 = d.data;
tempData = data2;
test.reload({
data: tempData
});
}
});
}
})
</script>

3
src/main/resources/templates/pages/stockTaking/stockTaking.html

@ -665,7 +665,8 @@
area: ['70%', '70%'],
move: '.layui-layer-title',
fixed: false,
content: '/selectMaterialByCardForTaking?mname=' + mname + '&type=3&clickObj=' + parentId + '&placeId=' + placeId + '&depositoryId=' + depositoryId,
content: '/getMaterialAll?mname=' + mname + '&type=3&clickObj=' + parentId + '&placeId=' + placeId + '&depositoryId=' + depositoryId,
// content: '/selectMaterialByCardForTaking?mname=' + mname + '&type=3&clickObj=' + parentId + '&placeId=' + placeId + '&depositoryId=' + depositoryId,
end: function () {
var mid = materialId.value;
$.ajax({

199
src/test/java/com/dreamchaser/depository_manage/Test.java

@ -1,6 +1,7 @@
package com.dreamchaser.depository_manage;
import cn.hutool.core.date.StopWatch;
import cn.hutool.core.lang.Snowflake;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@ -26,13 +27,20 @@ import com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_tem
import com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard.TemplateCard_SelectedItems;
import com.dreamchaser.depository_manage.pojo.callBackXml.callBackXml_button_templatecard.TemplateCard_button_selection;
import com.dreamchaser.depository_manage.service.*;
import com.dreamchaser.depository_manage.service.impl.MaterialServiceImpl;
import com.dreamchaser.depository_manage.service.impl.QyWxOperationService;
import com.dreamchaser.depository_manage.utils.*;
import lombok.Data;
import lombok.extern.log4j.Log4j;
import lombok.extern.log4j.Log4j2;
import lombok.var;
import org.apache.commons.codec.binary.Base64;
import org.apache.commons.codec.digest.DigestUtils;
import org.apache.commons.lang.StringEscapeUtils;
import org.apache.http.protocol.HTTP;
import org.apache.poi.poifs.property.Child;
import org.apache.poi.ss.formula.functions.Offset;
import org.apache.poi.ss.formula.functions.T;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
@ -85,15 +93,204 @@ public class Test {
@Autowired
MaterialTypeMapper materialTypeMapper;
@Autowired
RedisTemplate<String, String> redisTemplate;
@org.junit.Test
public void test1() throws AesException, IOException, ParserConfigurationException, SAXException {
List<Object> objectList = materialService.InitTreeMenus("");
List<Object> objectList = InitTree_Test();
}
/**
* 用于深度拷贝列表
*
* @param oldList
* @param <T>
* @return
*/
public static <T> List<T> deepCopy(List<T> oldList) {
List<T> newList = (List<T>) Arrays.asList(new Object[oldList.size()]);
Collections.copy(newList, oldList);
return newList;
}
public List<Object> InitTree_Test() {
List<MaterialType> materialTypeAll = materialTypeMapper.findMaterialTypeAll();
Integer totalVal = materialTypeAll.size();
double size = 100.0;
Integer threadSize = (int) Math.ceil(totalVal / 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);
List<Long> materialTypeList = new ArrayList<>();
for (int i = 0; i < materialTypeAll.size(); i++) {
MaterialType materialType = materialTypeAll.get(i);
if (((i + 1) % 100) == 0) {
Future<Object> future = completionService.submit(new TaskTest(materialTypeList));
futureList.add(future);
materialTypeList = new ArrayList<>();
} else {
materialTypeList.add(materialType.getOldId());
}
}
if (materialTypeList.size() > 0) {
Future<Object> future = completionService.submit(new TaskTest(materialTypeList));
futureList.add(future);
}
// 3.获取结果
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 TaskTest implements Callable<Object> {
List<Long> materialTypeIdList;
public TaskTest(List<Long> materialTypeByCondition) {
this.materialTypeIdList = materialTypeByCondition;
}
@Override
public Object call() throws Exception {
List<Object> list = new ArrayList<>();
// 开启对应数量的线程
List<Material> materialByTypeIds = materialMapper.findMaterialByTypeIds(materialTypeIdList);
List<MaterialType> materialTypeByOldIds = materialTypeMapper.findMaterialTypeByOldIds(materialTypeIdList);
ExecutorService exs = Executors.newFixedThreadPool(materialTypeByOldIds.size());
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
for (int i = 0; i < materialTypeByOldIds.size(); i++) {
MaterialType mt = materialTypeByOldIds.get(i);
Future<Object> future = completionService.submit(new MtTaskTest(mt, materialByTypeIds));
futureList.add(future);
}
// 3.获取结果
for (int i = 0; i < materialTypeIdList.size(); 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 MtTaskTest implements Callable<Object> {
MaterialType mt;
List<Material> materiaList;
public MtTaskTest(MaterialType mt, List<Material> materiaList) {
this.mt = mt;
this.materiaList = materiaList;
}
@Override
public Object call() throws Exception {
// 开启对应数量的线程
List<Material> materialList = new ArrayList<>();
for (int i = 0; i < materiaList.size(); i++) {
Material material = materiaList.get(i);
if (Long.compare(material.getMaterialTypeId(), mt.getOldId()) == 0) {
materialList.add(material);
}
}
List<Object> objectList = AddMaterialByType(materialList);
Map<String, Object> objectMap = InitTreeMenus(mt, objectList);
return objectMap;
}
}
// 构造树形组件数据模板
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;
}
}
// 在类别后添加物料名称
public List<Object> AddMaterialByType(List<Material> materialList) {
List<Object> result = new ArrayList<>();
for (int i = 0; i < materialList.size(); i++) {
Material material = materialList.get(i);
Map<String, Object> map = new HashMap<>();
String version = material.getVersion();
if (version == null) {
version = "";
}
String title = material.getMname() + ",规格型号: " + version;
map.put("title", title);
map.put("id", material.getId());
result.add(map);
}
return result;
}
public List<Object> buildTree(List<Object> list,Long parentId){
List<Object> result = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
JSONObject o = new JSONObject((Map<String,Object>)list.get(i));
Long id = Long.valueOf(o.getString("id"));
Long pid = Long.valueOf(o.getString("parentId"));
if(Long.compare(pid,parentId) == 0){
result.add(o);
}
}
return null;
}
}

13
target/classes/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml

@ -245,6 +245,19 @@
</foreach>
</select>
<select id="findMaterialByTypeIds" resultMap="materialMap" parameterType="list">
SELECT
<include refid="allColumns" />
from material m
where m.type_id in
<foreach collection="list" index="index" item="item" open="("
separator="," close=")">
#{item}
</foreach>
and state = 1;
</select>
<select id="findMaterialByDepositorysAndType" resultMap="materialMap" parameterType="map">
SELECT
<include refid="allColumns" />

13
target/classes/com/dreamchaser/depository_manage/mapper/MaterialTypeMapper.xml

@ -103,6 +103,19 @@
WHERE mt.parentId = #{parentId}
</select>
<!-- 根据主键批量获取数据 -->
<select id="findMaterialTypeByOldIds" resultMap="materialTypeMap" parameterType="list">
SELECT
<include refid="allColumns" />
FROM material_type mt
WHERE mt.oldId in
<foreach collection="list" index="index" item="item" open="("
separator="," close=")">
#{item}
</foreach>
</select>
<!-- 根据主键查询数据 -->
<select id="findMaterialTypeById" resultMap="materialTypeMap" parameterType="integer">
SELECT

3
target/classes/templates/pages/application/application-in.html

@ -532,7 +532,8 @@
maxmin: true,
shadeClose: true, //点击遮罩关闭层
area: ['70%', '70%'],
content: '/selectMaterialByCard?mname=' + mname + '&type=1&clickObj=' + parentId,
// content: '/selectMaterialByCard?mname=' + mname + '&type=1&clickObj=' + parentId,
content: '/getMaterialAll?mname=' + mname + '&type=1&clickObj=' + parentId,
move: '.layui-layer-title',
fixed: false,
end: function () {

105
target/classes/templates/pages/material/selectMaterialByApproval.html

@ -14,6 +14,8 @@
<input id="mname" name="mname" th:value="${mname}" style="display: none">
<input id="type" name="type" th:value="${type}" style="display: none">
<input id="clickObj" name="clickObj" th:value="${clickObj}" style="display: none">
<input id="placeId" name="placeId" th:value="${placeId}" style="display: none">
<input id="depositoryId" name="depositoryId" th:value="${depositoryId}" style="display: none">
<script src="/static/lib/layui-v2.6.3/layui.js" charset="utf-8"></script>
<script>
layui.use(['form', 'layer', 'dropdown', 'tree'], function () {
@ -22,26 +24,54 @@
var mname = $("#mname").val();
var type = $("#type").val();
var clickObj = $("#clickObj").val();
var placeId = $("#placeId").val();
var depositoryId = $("#depositoryId").val();
// 用于暂存当前查询结果
var tempData = [];
var req = {};
req.mname = mname;
req.type = "4";
req.type = type;
if(placeId !== "-1"){
req.placeId = placeId;
req.depositoryId = depositoryId;
}
var test = tree.render({
elem: '#test2'
, data: []
, click: function (obj) {
console.log(obj)
var state = obj.state;
if (obj.data.children !== undefined) {
if("open" === state){
var id = obj.data.id;
var param = {};
param.mtId = id;
param.mname = mname;
param.type = type;
if(placeId !== "-1"){
param.placeId = placeId;
param.depositoryId = depositoryId;
}
addTreeChildren(param);
}else{
return false
}
}else{
var windowParent = $("#"+clickObj,window.parent.document)[0];
var children = windowParent.childNodes[5];
var materialItem = children.childNodes[3].childNodes[1].childNodes;
var materialName = materialItem[1];
var materialId = materialName.parentNode.parentNode.childNodes[3];
materialName.value = obj.data.title;
materialId.value = obj.data.id;
var index = parent.layer.getFrameIndex(window.name);
parent.layer.close(index);
}
},
oncheck:function (obj) {
console.log(obj)
}
});
$.ajax({
@ -63,10 +93,67 @@
}
});
$(".layui-tree-iconClick").addEventListener("click",function (obj) {
console.log(obj)
})
$("#test2").on("click",".layui-tree-entry",function(event){
var target = $(event.target);
var id = this.parentNode.getAttribute("data-id");
var context = target.context.className;
if(context.includes("layui-tree-main")){
var childrenName = this.childNodes[0].childNodes[0].childNodes[0].className;
if(childrenName.includes("layui-icon-addition")){
// console.log("隐藏")
}else if(childrenName.includes("layui-icon-subtraction")){
var param = {};
param.mtId = id;
param.mname = mname;
param.type = type;
if(placeId !== "-1"){
param.placeId = placeId;
param.depositoryId = depositoryId;
}
addTreeChildren(param);
}
}else if(context.includes("layui-icon")){
if(context.includes("layui-icon-addition")){
// console.log("隐藏")
}else if(context.includes("layui-icon-subtraction")){
var param = {};
param.mtId = id;
param.mname = mname;
param.type = type;
if(placeId !== "-1"){
param.placeId = placeId;
param.depositoryId = depositoryId;
}
addTreeChildren(param);
}
}
});
// 用于添加分支
addTreeChildren = function(param) {
$.ajax({
url: "/material/getNewTreeForMtId",
data: JSON.stringify(param),
type: 'post',
dataType: 'json',
contentType: "application/json;charset=utf-8",
beforeSend: function () {
this.layerIndex = layer.load(0, {shade: [0.5, '#393D49']});
},
success: function (d) {
layer.close(this.layerIndex);
var data2 = d.data;
tempData = data2;
test.reload({
data: tempData
});
}
});
}
})
</script>

Loading…
Cancel
Save