|
|
|
@ -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; |
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|