Browse Source

修改出库申请审批时,为前置仓的不走仓储

lwx_dev
erdanergou 3 years ago
parent
commit
c0ba8eb882
  1. 20
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryController.java
  2. 26
      src/main/java/com/dreamchaser/depository_manage/controller/MaterialTypeController.java
  3. 8
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java
  4. 9
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml
  5. 2
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialTypeMapper.xml
  6. 9
      src/main/java/com/dreamchaser/depository_manage/service/DepositoryService.java
  7. 13
      src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java
  8. 284
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryServiceImpl.java
  9. 81
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java
  10. 43
      src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java
  11. 3
      src/main/resources/templates/pages/materialtype/materialType_view.html
  12. 10
      src/test/java/com/dreamchaser/depository_manage/TestForOther.java
  13. 9
      target/classes/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml
  14. 2
      target/classes/com/dreamchaser/depository_manage/mapper/MaterialTypeMapper.xml
  15. 3
      target/classes/templates/pages/materialtype/materialType_view.html

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

@ -589,7 +589,7 @@ public class DepositoryController {
new Thread(new Runnable() {
@Override
public void run() {
UpdateSonMaterialState(id, state);
// UpdateSonMaterialState(id, state);
}
}).start();
}
@ -604,14 +604,14 @@ public class DepositoryController {
public void UpdateSonState(String parentId, Integer state, boolean envelop, UserByPort userToken) {
Map<String, Object> param = new HashMap<>();
param.put("parentId", parentId);
// 获取当前仓库所有子仓库
List<Depository> depositoryRecordPByCondition = depositoryService.findDepositoryByCondition(param, userToken);
if (envelop) {
// if (envelop) {
// 将当前仓库下的产品状态改为禁用
UpdateSonMaterialState(parentId, state);
}
for (int i = 0; i < depositoryRecordPByCondition.size(); i++) {
Depository depository = depositoryRecordPByCondition.get(i);
// UpdateSonMaterialState(parentId, state);
// }
for (Depository depository : depositoryRecordPByCondition) {
int depositoryId = depository.getId();
Map<String, Object> newMap = new HashMap<>();
newMap.put("parentId", depositoryId);
@ -632,14 +632,6 @@ public class DepositoryController {
public void UpdateSonMaterialState(String parentId, Integer state) {
Map<String, Object> param = new HashMap<>();
param.put("depositoryId", parentId);
List<MaterialP> materialPByCondition = materialService.findMaterialPByCondition(param);
for (int i = 0; i < materialPByCondition.size(); i++) {
MaterialP materialP = materialPByCondition.get(i);
Map<String, Object> map = new HashMap<>();
map.put("id", materialP.getId());
map.put("state", state);
materialService.updateStateByParam(map);
}
}

26
src/main/java/com/dreamchaser/depository_manage/controller/MaterialTypeController.java

@ -43,7 +43,7 @@ public class MaterialTypeController {
} catch (InterruptedException e) {
e.printStackTrace();
}
materialService.InitTreeMenus_Test();
materialService.RefreshInitTreeMenus();
}
}).start();
return CrudUtil.postHandle(integer,1);
@ -105,7 +105,7 @@ public class MaterialTypeController {
} catch (InterruptedException e) {
e.printStackTrace();
}
materialService.InitTreeMenus_Test();
materialService.RefreshInitTreeMenus();
}
}).start();
@ -134,7 +134,7 @@ public class MaterialTypeController {
} catch (InterruptedException e) {
e.printStackTrace();
}
materialService.InitTreeMenus_Test();
materialService.RefreshInitTreeMenus();
}
}).start();
return CrudUtil.deleteHandle(integer,ids.size());
@ -187,7 +187,7 @@ public class MaterialTypeController {
} catch (InterruptedException e) {
e.printStackTrace();
}
materialService.InitTreeMenus_Test();
materialService.RefreshInitTreeMenus();
}
}).start();
@ -215,7 +215,7 @@ public class MaterialTypeController {
} catch (InterruptedException e) {
e.printStackTrace();
}
materialService.InitTreeMenus_Test();
materialService.RefreshInitTreeMenus();
}
}).start();
@ -248,7 +248,7 @@ public class MaterialTypeController {
} catch (InterruptedException e) {
e.printStackTrace();
}
materialService.InitTreeMenus_Test();
materialService.RefreshInitTreeMenus();
}
}).start();
return CrudUtil.postHandle(integer,1);
@ -362,7 +362,7 @@ public class MaterialTypeController {
} catch (InterruptedException e) {
e.printStackTrace();
}
materialService.InitTreeMenus_Test();
materialService.RefreshInitTreeMenus();
}
}).start();
@ -399,15 +399,9 @@ public class MaterialTypeController {
*/
public void UpdateSonMaterialState(String parentId,Integer state){
Map<String,Object> param = new HashMap<>();
param.put("materialTypeId",parentId);
List<MaterialP> materialPByCondition = materialService.findMaterialPByCondition(param);
for (int i = 0; i < materialPByCondition.size(); i++) {
MaterialP materialP = materialPByCondition.get(i);
Map<String,Object> map = new HashMap<>();
map.put("id",materialP.getId());
map.put("state",state);
materialService.updateStateByParam(map);
}
param.put("typeId",parentId);
param.put("state",state);
materialService.updateStateByTypeId(param);
}

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

@ -227,6 +227,14 @@ public interface MaterialMapper {
*/
Integer updateStateByParam(Map<String,Object> map);
/**
* 根据物料类型修改物料状态
* @param map 待修改条件
* @return
*/
Integer updateStateByTypeId(Map<String,Object> map);
/**
* 根据仓库查询物品
* @param ids

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

@ -1043,6 +1043,15 @@
and state != 3
</update>
<update id="updateStateByTypeId" parameterType="map">
UPDATE material
<set>
state = #{state}
</set>
where type_id = #{typeId}
</update>
<!-- 根据主键批量将状态改为删除-->
<update id="changeStateToDeletedByIds" parameterType="list">
update material

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

@ -31,7 +31,7 @@
select
<include refid="allColumns" />
FROM material_type mt
where mt.state != 3 and mt.state != 4 and mt.parentId = 0
where mt.state = 1 and mt.parentId = 0
</select>
<select id="findMaterialTypeCountByCondition" resultType="int" parameterType="map">

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

@ -101,6 +101,15 @@ public interface DepositoryService {
*/
Integer changeStateToDeletedByIds(List<Integer> ids);
/**
* 查询当前仓库的最上层仓库
* @param depositoryId 当前仓库
* @return
*/
Depository findTopDepositoryByDepository(Integer depositoryId);
/**
* 计算未删除的仓库总和
* @return

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

@ -186,6 +186,13 @@ public interface MaterialService {
*/
Integer updateStateByParam(Map<String,Object> map);
/**
* 根据物料类型修改物料状态
* @param map 待修改条件
* @return
*/
Integer updateStateByTypeId(Map<String,Object> map);
/**
* 构造树形选择框(部门)
* @return
@ -210,6 +217,12 @@ public interface MaterialService {
*/
List<Object> InitTreeMenus_Test();
/**
* 更新树形选择框
*/
void RefreshInitTreeMenus();
/**
* 根据仓库查询物品
* @param dids

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

@ -130,13 +130,12 @@ public class DepositoryServiceImpl implements DepositoryService {
map.put("begin", (page - 1) * size);
}
Object state = 1;
if(map.containsKey("state")){
if (map.containsKey("state")) {
state = map.get("state");
}
map.put("state",state);
map.put("state", state);
List<Depository> list = depositoryMapper.findDepositoryByCondition(map);
for (int i = 0; i < list.size(); i++) {
Depository depository = list.get(i);
for (Depository depository : list) {
if (!depository.getAdminorg().isEmpty()) {
Administration company = LinkInterfaceUtil.getCompany(ObjectFormatUtil.toInteger(depository.getAdminorg()), userByPort);
depository.setAdminorgName(company.getName());
@ -154,10 +153,10 @@ public class DepositoryServiceImpl implements DepositoryService {
@Override
public Integer findCountByCondition(Map<String, Object> map) {
Object state = 1;
if(map.containsKey("state")){
if (map.containsKey("state")) {
state = map.get("state");
}
map.put("state",state);
map.put("state", state);
return depositoryMapper.findCountByCondition(map);
}
@ -255,6 +254,42 @@ public class DepositoryServiceImpl implements DepositoryService {
return depositoryMapper.changeStateToDeletedByIds(ids);
}
/**
* 查询当前仓库的最上层仓库
*
* @param depositoryId 当前仓库
* @return
*/
@Override
public Depository findTopDepositoryByDepository(Integer depositoryId) {
Depository depositoryById = depositoryMapper.findDepositoryById(depositoryId);
if (Integer.compare(0, depositoryById.getParentId()) == 0) {
// 如果当前仓库没有父级仓库
return depositoryById;
} else {
// 如果不是最高
// 获取所有仓库
List<Depository> depositoryAll = depositoryMapper.findDepositoryAll();
return findParentDepository(depositoryById, depositoryAll);
}
}
Depository findParentDepository(Depository depository, List<Depository> depositoryList) {
for (Depository d : depositoryList
) {
if (Integer.compare(depository.getParentId(), d.getId()) == 0) {
if(Integer.compare(0,d.getParentId()) == 0){
return d;
}else{
return findParentDepository(d,depositoryList);
}
}
}
return null;
}
/**
* 计算未删除仓库综合
*
@ -335,9 +370,9 @@ public class DepositoryServiceImpl implements DepositoryService {
}
@Override
public List<Object> InitTreeMenus(String adminorg,UserByPort userByPort) {
public List<Object> InitTreeMenus(String adminorg, UserByPort userByPort) {
List<Object> list = new ArrayList<>();
list = buildTree_New(InitTreeMenus_New(adminorg,userByPort),0);
list = buildTree_New(InitTreeMenus_New(adminorg, userByPort), 0);
return list;
}
@ -353,7 +388,7 @@ public class DepositoryServiceImpl implements DepositoryService {
return depositoryMapper.selectDepositoryByIds(ids);
}
public List<Object> InitTreeMenus_New(String adminorg,UserByPort userByPort) {
public List<Object> InitTreeMenus_New(String adminorg, UserByPort userByPort) {
// 定义结果集
List<Object> list = new ArrayList<>();
@ -383,7 +418,7 @@ public class DepositoryServiceImpl implements DepositoryService {
Depository depository = depositoryAll.get(i);
if (((i + 1) % 10) == 0) { // 如果有10个开启线程进行处理
depositoryIdList.add(depository.getId());
Future<Object> future = completionService.submit(new Task(depositoryIdList,adminorg,userByPort));
Future<Object> future = completionService.submit(new Task(depositoryIdList, adminorg, userByPort));
openThreadSize++;
futureList.add(future); // 添加到结果集
depositoryIdList = new ArrayList<>(); // 情况列表
@ -395,7 +430,7 @@ public class DepositoryServiceImpl implements DepositoryService {
if (depositoryIdList.size() > 0) {
// 如果有剩余,开启线程进行处理
Future<Object> future = completionService.submit(new Task(depositoryIdList,adminorg,userByPort));
Future<Object> future = completionService.submit(new Task(depositoryIdList, adminorg, userByPort));
futureList.add(future);
openThreadSize++;
}
@ -417,7 +452,7 @@ public class DepositoryServiceImpl implements DepositoryService {
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 (Integer.compare(parentId, 0) != 0) {
if (!checkList(list, parentId)) {
// 如果当前列表中不存在其父级
Depository depositoryById = depositoryMapper.findDepositoryById(parentId);
@ -425,102 +460,9 @@ public class DepositoryServiceImpl implements DepositoryService {
}
}
}
return list;
}
// 用于执行线程任务
class Task implements Callable<Object> {
// 仓库
List<Integer> depositoryIdList;
// 部门
String adminorg;
// 当前登录用户
UserByPort userByPort;
public Task(List<Integer> depositoryIdList,String adminorg,UserByPort userByPort){
this.depositoryIdList = depositoryIdList;
this.adminorg = adminorg;
this.userByPort = userByPort;
}
@Override
public Object call() throws Exception {
/**
* 获取当前仓库id对应的仓库
*/
List<Depository> depositories = depositoryMapper.selectDepositoryByIds(depositoryIdList);
// 获取当前用户管理的仓库
List<RoleAndDepository> depositoryAndRole = roleMapper.findDepositoryAndRole(userByPort.getId());
// 定义树结构结果集
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)||"361".equals(adminorg)){ // 如果不按部门分类或是仓储中心人员,则全部加载
Future<Object> submit = completionService.submit(new PlaceTask(depository));
futureList.add(submit);
openThreadSize++;
}else{
if(adminorg.equals(depository.getAdminorg()) || checkDidInDepositoryIdList(depository.getId(),depositoryAndRole)){
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;
}
return list;
}
// 在仓库后添加库位信息
public List<Object> AddPlaceByDid(Depository d) {
if (d != null) {
@ -557,7 +499,6 @@ public class DepositoryServiceImpl implements DepositoryService {
}
}
// 构造树形组件数据模板
public Map<String, Object> InitTreeMenus2(Depository d, List<Object> children) {
if (d != null) {
@ -565,21 +506,21 @@ public class DepositoryServiceImpl implements DepositoryService {
map.put("title", d.getDname());
map.put("id", d.getId());
map.put("children", children);
map.put("parentId",d.getParentId());
map.put("parentId", d.getParentId());
return map;
} else {
return null;
}
}
/**
* 用于构造树结构
* @param list 树列表
*
* @param list 树列表
* @param parentId 父级id
* @return
*/
public List<Object> buildTree_New(List<Object> list,Integer parentId){
public List<Object> buildTree_New(List<Object> list, Integer parentId) {
// 定义树结构
List<Object> result = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
@ -587,7 +528,7 @@ public class DepositoryServiceImpl implements DepositoryService {
JSONObject jsonObject = new JSONObject((Map<String, Object>) list.get(i));
// 获取当前父级id
Long parentId1 = jsonObject.getLong("parentId");
if(Long.compare(parentId,parentId1) == 0){ // 如果当前类型是其父类
if (Long.compare(parentId, parentId1) == 0) { // 如果当前类型是其父类
List<Object> objectList = buildTree_New(list, jsonObject.getInteger("id")); // 获取当前类型的子类
JSONArray children = jsonObject.getJSONArray("children");
children.addAll(objectList);
@ -599,15 +540,16 @@ public class DepositoryServiceImpl implements DepositoryService {
/**
* 判断当前父级id是否在列表中
*
* @param list
* @param parentId
* @return
*/
public Boolean checkList(List<Object> list,Integer parentId){
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){
if (Integer.compare(pid, parentId) == 0) {
return true;
}
}
@ -616,11 +558,12 @@ public class DepositoryServiceImpl implements DepositoryService {
/**
* 用于判断当前仓库是否是用户所管理的仓库
*
* @param depositoryId 仓库id
* @param list 用户管理仓库列表
* @param list 用户管理仓库列表
* @return
*/
public boolean checkDidInDepositoryIdList(Integer depositoryId,List<RoleAndDepository> list){
public boolean checkDidInDepositoryIdList(Integer depositoryId, List<RoleAndDepository> list) {
for (RoleAndDepository roleAndDepository : list) {
if (Integer.compare(depositoryId, roleAndDepository.getDepositoryId()) == 0) {
// 是其所管理的仓库
@ -630,7 +573,6 @@ public class DepositoryServiceImpl implements DepositoryService {
return false;
}
/**
* 获取当前部门以及公共仓库
*
@ -645,6 +587,7 @@ public class DepositoryServiceImpl implements DepositoryService {
/**
* 根据仓库构造库位的树形选择框
*
* @param depositoryId 仓库id
* @return
*/
@ -711,32 +654,35 @@ public class DepositoryServiceImpl implements DepositoryService {
/**
* 获取仓库对应的二维码
*
* @param did
* @return
*/
@Override
public String findQrCodeByDepository(Integer did) {
Map<String,Object> map = new HashMap<>();
Map<String, Object> map = new HashMap<>();
// 1为库位2为仓库
map.put("flag",2);
map.put("depositoryId",did);
map.put("flag", 2);
map.put("depositoryId", did);
return qrCodeMapper.selectQrCodeByDepositoryOrPlace(map);
}
/**
* 用于添加仓库与二维码的对应关系
*
* @param map
* @return
*/
@Override
public Integer addQrCodeByDepository(Map<String, Object> map) {
// 1为库位2为仓库
map.put("flag",2);
map.put("flag", 2);
return qrCodeMapper.addQrCodeByPidOrDid(map);
}
/**
* 获取每个仓库以及对应
*
* @return
*/
@Override
@ -744,11 +690,7 @@ public class DepositoryServiceImpl implements DepositoryService {
return depositoryMapper.getToDayInventoryByDNameTest();
}
private boolean hasDepository(List<Depository> list,Depository o){
private boolean hasDepository(List<Depository> list, Depository o) {
boolean flag = false;
for (Depository depository : list) {
if (depository.getCode().equals(o.getCode())) {
@ -759,6 +701,96 @@ public class DepositoryServiceImpl implements DepositoryService {
return flag;
}
// 用于执行线程任务
class Task implements Callable<Object> {
// 仓库
List<Integer> depositoryIdList;
// 部门
String adminorg;
// 当前登录用户
UserByPort userByPort;
public Task(List<Integer> depositoryIdList, String adminorg, UserByPort userByPort) {
this.depositoryIdList = depositoryIdList;
this.adminorg = adminorg;
this.userByPort = userByPort;
}
@Override
public Object call() throws Exception {
/**
* 获取当前仓库id对应的仓库
*/
List<Depository> depositories = depositoryMapper.selectDepositoryByIds(depositoryIdList);
// 获取当前用户管理的仓库
List<RoleAndDepository> depositoryAndRole = roleMapper.findDepositoryAndRole(userByPort.getId());
// 定义树结构结果集
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) || "361".equals(adminorg)) { // 如果不按部门分类或是仓储中心人员,则全部加载
Future<Object> submit = completionService.submit(new PlaceTask(depository));
futureList.add(submit);
openThreadSize++;
} else {
if (adminorg.equals(depository.getAdminorg()) || checkDidInDepositoryIdList(depository.getId(), depositoryAndRole)) {
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;
}
}
}

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

@ -195,7 +195,7 @@ public class MaterialServiceImpl implements MaterialService {
}
/**
* 根据条件查询符合条件的库存信息
* 根据条件查询符合条件的物料信息
*
* @param map 条件map
* @return 符合条件的库存信息
@ -217,16 +217,16 @@ public class MaterialServiceImpl implements MaterialService {
}
map.put("state", state);
List<Material> list = materialMapper.findMaterialByCondition(map);
for (int i = 0; i < list.size(); i++) {
list.get(i).setPrice(list.get(i).getPrice() / 100);
list.get(i).setAmounts(list.get(i).getAmounts() / 100);
for (Material material : list) {
material.setPrice(material.getPrice() / 100);
material.setAmounts(material.getAmounts() / 100);
// 获取当前物料所处仓库
Integer depositoryId = list.get(i).getDepositoryId();
Integer depositoryId = material.getDepositoryId();
// 获取当前物料所处库位
StringBuilder placeCode = new StringBuilder();
if (depositoryId != null) {
Integer mid = list.get(i).getId();
Integer mid = material.getId();
List<PlaceP> placeByMidAndDid = placeService.findPlaceByMidAndDid(mid, depositoryId);
for (int j = 0; j < placeByMidAndDid.size(); j++) {
placeCode.append(placeByMidAndDid.get(j).getCode()).append(" ");
@ -236,9 +236,9 @@ public class MaterialServiceImpl implements MaterialService {
if (depositoryId != null) {
Depository depositoryRecordById = depositoryMapper.findDepositoryById(depositoryId);
String code = depositoryRecordById.getCode();
list.get(i).setDepositoryCode(code);
material.setDepositoryCode(code);
}
list.get(i).setPlaceCode(placeCode.toString());
material.setPlaceCode(placeCode.toString());
}
return packForMatieral(list);
}
@ -621,6 +621,16 @@ public class MaterialServiceImpl implements MaterialService {
return materialMapper.updateStateByParam(map);
}
/**
* 根据物料类型修改物料状态
* @param map 待修改条件
* @return
*/
@Override
public Integer updateStateByTypeId(Map<String, Object> map) {
return materialMapper.updateStateByTypeId(map);
}
/**
* 对查出来的库存记录进行包装包装成前端需要的数据
*
@ -2161,8 +2171,7 @@ public class MaterialServiceImpl implements MaterialService {
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int i = 0; i < wms_materialTree_result.size(); i++) {
String s = wms_materialTree_result.get(i);
for (String s : wms_materialTree_result) {
JSONObject jsonObject = JSONObject.parseObject(s);
list.add(jsonObject);
}
@ -2180,9 +2189,8 @@ public class MaterialServiceImpl implements MaterialService {
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
// 开启线程
for (int i = 0; i < materialTypeNoParent.size(); i++) {
for (MaterialType materialType : materialTypeNoParent) {
// 创建对应数量的线程
MaterialType materialType = materialTypeNoParent.get(i);
Future<Object> future = completionService.submit(new TaskTest(materialType, 1, 1));
futureList.add(future);
@ -2192,9 +2200,7 @@ public class MaterialServiceImpl implements MaterialService {
Object result = null;
try {
result = completionService.take().get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
list.add(result);
@ -2205,17 +2211,57 @@ public class MaterialServiceImpl implements MaterialService {
}
}
/**
* 更新树形选择框
*/
@Override
public void RefreshInitTreeMenus() {
// 删除当前存储的树
redisTemplate.delete("wms_materialTree_result");
List<MaterialType> materialTypeNoParent = materialTypeMapper.findMaterialTypeNoParent();
// 开启对应数量的线程
ExecutorService exs = Executors.newFixedThreadPool(materialTypeNoParent.size());
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
// 开启线程
for (MaterialType materialType : materialTypeNoParent) {
// 创建对应数量的线程
Future<Object> future = completionService.submit(new TaskTest(materialType, 1, 1));
futureList.add(future);
}
for (int i = 0; i < materialTypeNoParent.size(); i++) {
Object result = null;
try {
result = completionService.take().get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
redisTemplate.opsForList().rightPush("wms_materialTree_result", JSON.toJSONString(result));
redisTemplate.expire("wms_materialTree_result", DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
}
}
// 根据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);
param.put("state",1);
// 获取当前父类的子类
List<MaterialType> materialTypeByCondition = materialTypeMapper.findMaterialTypeByCondition(param);
if (materialTypeByCondition.size() > 0) {
for (int i = 0; i < materialTypeByCondition.size(); i++) {
MaterialType mt = materialTypeByCondition.get(i);
for (MaterialType mt : materialTypeByCondition) {
List<Object> childForMaterialTypeByParent = findChildForMaterialTypeByParent_OnlyType(mt.getOldId());
result.add(InitTreeMenus(mt, childForMaterialTypeByParent));
}
@ -2230,6 +2276,7 @@ public class MaterialServiceImpl implements MaterialService {
Map<String, Object> param = new HashMap<>();
List<Object> result = new ArrayList<>();
param.put("parentId", Oldid);
param.put("state",1);
// 获取当前父类的子类
List<MaterialType> materialTypeByCondition = materialTypeMapper.findMaterialTypeByCondition(param);
if (materialTypeByCondition.size() > 0 && (level == staticlevel)) {

43
src/main/java/com/dreamchaser/depository_manage/service/impl/QyWxOperationService.java

@ -50,6 +50,7 @@ public class QyWxOperationService {
@Autowired
MaterialTypeMapper materialTypeMapper;
/**
* 用于向企业微信发送出库消息
*
@ -1431,11 +1432,9 @@ public class QyWxOperationService {
approval_template_approver_departMentHeader.setUserid(userIdList);
approval_template_approver_list.add(approval_template_approver_departMentHeader);
// 审批申请数据,可定义审批申请中各个控件的值,其中必填项必须有值,选填项可为空,数据结构同“获取审批申请详情”接口返回值中同名参数“apply_data”
Approval_template_apply_data approval_template_apply_data = new Approval_template_apply_data();
@ -1483,7 +1482,6 @@ public class QyWxOperationService {
approval_template_apply_data_contents_department.setId("Contact-1668048405619");
// 部门控件值(control参数为Contact,且value参数为departments)
Map<String, Object> members_department = new HashMap<>();
Map<String, String> contact_department = new HashMap<>();
@ -1625,11 +1623,20 @@ public class QyWxOperationService {
detail_list_control_info_value_dname.put("text", depositoryById.getDname());
detail_list_control_info_depositoryName.put("value", detail_list_control_info_value_dname);
if(!(depositoryById.getDname().contains("办公用品库")||depositoryById.getDname().contains("消防用品库"))){
// 如果不是办公用品库
if (Integer.compare(depositoryById.getParentId(), 0) != 0) {
// 如果不是
List<Depository> depositoryAll = depositoryMapper.findDepositoryAll();
depositoryById = findParentDepository(depositoryById, depositoryAll);
}
if (!depositoryById.getDname().contains("前置仓")) {
// 如果不是前置仓下的仓库
flag = false;
}
// 物料规格型号
Map<String, Object> detail_list_control_info_version = new HashMap<>();
detail_list_control_info_version.put("control", "Text");
@ -1714,13 +1721,13 @@ public class QyWxOperationService {
//抄送方式:1-提单时抄送(默认值); 2-单据通过后抄送;3-提单和单据通过后抄送。仅use_template_approver为0时生效。
approvalTemplate.setNotify_type(2);
if(!flag){
if (!flag) {
// 如果有其他仓库
// 获取仓储中心负责人标签的用户userId
List<String> qyWxLabelUserList = QyWxConfig.getQyWxLabelUserList(userAgent);
// 用于设置部门负责人流程
Approval_template_approver approval_template_approver_Label= new Approval_template_approver();
Approval_template_approver approval_template_approver_Label = new Approval_template_approver();
approval_template_approver_Label.setAttr(1);
approval_template_approver_Label.setUserid(qyWxLabelUserList);
@ -2600,4 +2607,26 @@ public class QyWxOperationService {
// 返回
return jsonObject;
}
/**
* 用于获取当前仓库的最顶级仓库
*
* @param depository 仓库
* @param depositoryList 所有仓库
* @return
*/
Depository findParentDepository(Depository depository, List<Depository> depositoryList) {
for (Depository d : depositoryList
) {
if (Integer.compare(depository.getParentId(), d.getId()) == 0) {
if (Integer.compare(0, d.getParentId()) == 0) {
return d;
} else {
return findParentDepository(d, depositoryList);
}
}
}
return null;
}
}

3
src/main/resources/templates/pages/materialtype/materialType_view.html

@ -271,7 +271,6 @@
table.on('tool(currentTableFilter)', function (obj) {
let data = obj.data;
console.log(data)
if (obj.event === 'detail') {
req = {};
req.parentId = parentId;
@ -440,7 +439,7 @@
}
req["id"] = this.value;
var hasMaterial = false;
if (req["state"] == undefined) { //如果禁用
if (req["state"] === undefined) { //如果禁用
$.ajax({
url: "/materialType/findMaterialByMaterialTypeId", // 判断该类型下是否有物品
type: "post",

10
src/test/java/com/dreamchaser/depository_manage/TestForOther.java

@ -8,8 +8,10 @@ import com.dreamchaser.depository_manage.config.PortConfig;
import com.dreamchaser.depository_manage.config.QyWxConfig;
import com.dreamchaser.depository_manage.controller.EPSON.AddMediaLayoutDlg;
import com.dreamchaser.depository_manage.controller.EPSON.PrintSettingsDlg;
import com.dreamchaser.depository_manage.entity.Depository;
import com.dreamchaser.depository_manage.entity.EPSON.EPDM.MEDIA_LAYOUT;
import com.dreamchaser.depository_manage.entity.qywxDepartment;
import com.dreamchaser.depository_manage.service.DepositoryService;
import com.dreamchaser.depository_manage.service.impl.EPSON.EPDM.EPDMWrapper;
import com.dreamchaser.depository_manage.service.impl.EPSON.EPDM.EPDMWrapperImpl;
import com.sun.jna.*;
@ -17,6 +19,7 @@ import com.sun.jna.ptr.IntByReference;
import com.sun.jna.win32.W32APIOptions;
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;
@ -33,6 +36,9 @@ import java.util.Map;
@RunWith(SpringRunner.class)
public class TestForOther {
@Autowired
DepositoryService depositoryService;
@Test
public void Test() throws IOException {
// 51
@ -41,6 +47,10 @@ public class TestForOther {
// System.out.println(qyWxDepartment.getDepartment_leader().get(0));
// Map<String, Object> portInfo = PortConfig.findUserByQyWxUserId("WoBenShanLiang_3");
// System.out.println(portInfo);
Depository topDepositoryByDepository = depositoryService.findTopDepositoryByDepository(10);
System.out.println(topDepositoryByDepository);
}

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

@ -1043,6 +1043,15 @@
and state != 3
</update>
<update id="updateStateByTypeId" parameterType="map">
UPDATE material
<set>
state = #{state}
</set>
where type_id = #{typeId}
</update>
<!-- 根据主键批量将状态改为删除-->
<update id="changeStateToDeletedByIds" parameterType="list">
update material

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

@ -31,7 +31,7 @@
select
<include refid="allColumns" />
FROM material_type mt
where mt.state != 3 and mt.state != 4 and mt.parentId = 0
where mt.state = 1 and mt.parentId = 0
</select>
<select id="findMaterialTypeCountByCondition" resultType="int" parameterType="map">

3
target/classes/templates/pages/materialtype/materialType_view.html

@ -271,7 +271,6 @@
table.on('tool(currentTableFilter)', function (obj) {
let data = obj.data;
console.log(data)
if (obj.event === 'detail') {
req = {};
req.parentId = parentId;
@ -440,7 +439,7 @@
}
req["id"] = this.value;
var hasMaterial = false;
if (req["state"] == undefined) { //如果禁用
if (req["state"] === undefined) { //如果禁用
$.ajax({
url: "/materialType/findMaterialByMaterialTypeId", // 判断该类型下是否有物品
type: "post",

Loading…
Cancel
Save