4 changed files with 0 additions and 408 deletions
@ -1,35 +0,0 @@ |
|||
package com.dreamchaser.depository_manage; |
|||
|
|||
import com.alibaba.fastjson.JSONObject; |
|||
import com.dreamchaser.depository_manage.config.PortConfig; |
|||
import com.dreamchaser.depository_manage.config.QyWxConfig; |
|||
import com.dreamchaser.depository_manage.entity.ApplicationOutRecordMin; |
|||
import com.dreamchaser.depository_manage.entity.UserByPort; |
|||
import com.dreamchaser.depository_manage.entity.qywxDepartment; |
|||
import com.dreamchaser.depository_manage.mapper.DepositoryRecordMapper; |
|||
import com.dreamchaser.depository_manage.pojo.ApplicationInRecordP; |
|||
import com.dreamchaser.depository_manage.utils.LinkInterfaceUtil; |
|||
import org.junit.Test; |
|||
import org.junit.runner.RunWith; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.boot.test.context.SpringBootTest; |
|||
import org.springframework.test.context.junit4.SpringRunner; |
|||
|
|||
import java.util.ArrayList; |
|||
import java.util.HashMap; |
|||
import java.util.List; |
|||
import java.util.Map; |
|||
|
|||
@RunWith(SpringRunner.class) |
|||
@SpringBootTest |
|||
public class TestOther { |
|||
|
|||
@Autowired |
|||
DepositoryRecordMapper depositoryRecordMapper; |
|||
|
|||
@Test |
|||
public void Test(){ |
|||
|
|||
|
|||
} |
|||
} |
|||
@ -1,198 +0,0 @@ |
|||
package com.dreamchaser.depository_manage; |
|||
|
|||
import com.alibaba.fastjson.JSONObject; |
|||
import com.dreamchaser.depository_manage.config.QyWxConfig; |
|||
import com.dreamchaser.depository_manage.entity.MaterialType; |
|||
import com.dreamchaser.depository_manage.entity.ThreeAboutMan; |
|||
import com.dreamchaser.depository_manage.entity.qywxDepartment; |
|||
import com.dreamchaser.depository_manage.service.impl.QyWxOperationService; |
|||
import org.junit.Test; |
|||
import org.junit.runner.RunWith; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.boot.test.context.SpringBootTest; |
|||
import org.springframework.test.context.junit4.SpringRunner; |
|||
|
|||
import java.util.*; |
|||
import java.util.concurrent.*; |
|||
|
|||
@SpringBootTest |
|||
@RunWith(SpringRunner.class) |
|||
public class TestQyWxAdministration { |
|||
|
|||
|
|||
@Test |
|||
public void Test() { |
|||
// 获取所有企业微信的部门列表
|
|||
List<qywxDepartment> qyWxDepartmentListAll = QyWxConfig.getQyWxDepartmentList("8b283ea8ba44697a18c763443c257db5", 51); |
|||
|
|||
// 设置用于开启线程的部门列表
|
|||
List<qywxDepartment> qyWxDepartmentList = new ArrayList<>(); |
|||
|
|||
|
|||
// 定义分页数量
|
|||
double size = 20.0; |
|||
|
|||
// 定义线程数
|
|||
int threadSize = (int) Math.ceil(qyWxDepartmentListAll.size() / size); |
|||
|
|||
// 开启对应数量的线程
|
|||
ExecutorService exs = Executors.newFixedThreadPool(threadSize); |
|||
|
|||
// 1.定义CompletionService
|
|||
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs); |
|||
|
|||
// 线程结果集
|
|||
List<Future<Object>> futureList = new ArrayList<Future<Object>>(); |
|||
|
|||
|
|||
for (int i = 0; i < qyWxDepartmentListAll.size(); i++) { |
|||
// 获取当前类型
|
|||
qywxDepartment qywxDepartment = qyWxDepartmentListAll.get(i); |
|||
if (((i + 1) % 20) == 0) { // 如果有100个开启线程进行处理
|
|||
qyWxDepartmentList.add(qywxDepartment); |
|||
InitDepartmentTree taskTest = new InitDepartmentTree(qyWxDepartmentList, qyWxDepartmentListAll); |
|||
Future<Object> future = completionService.submit(taskTest); |
|||
futureList.add(future); // 添加到结果集
|
|||
qyWxDepartmentList = new ArrayList<>(); // 情况列表
|
|||
} else { |
|||
// 添加id到列表中
|
|||
if (Integer.compare(qywxDepartment.getParentid(), 3) == 0) { |
|||
qyWxDepartmentList.add(qywxDepartment); |
|||
} |
|||
} |
|||
} |
|||
|
|||
|
|||
if (qyWxDepartmentList.size() > 0) { |
|||
// 如果有剩余,开启线程进行处理
|
|||
InitDepartmentTree taskTest = new InitDepartmentTree(qyWxDepartmentList, qyWxDepartmentListAll); |
|||
Future<Object> future = completionService.submit(taskTest); |
|||
futureList.add(future); |
|||
} |
|||
|
|||
// 树结构结果集
|
|||
List<Object> list = new ArrayList<>(); |
|||
|
|||
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.addAll((Collection<?>) result); |
|||
} |
|||
|
|||
System.out.println(JSONObject.toJSONString(list)); |
|||
} |
|||
|
|||
|
|||
@Test |
|||
public void Test2(){ |
|||
List<Integer> qyWxDepartmentIdList = QyWxConfig.getQyWxDepartmentIdList("8b283ea8ba44697a18c763443c257db5", 51); |
|||
System.out.println(qyWxDepartmentIdList); |
|||
} |
|||
|
|||
/** |
|||
* 用于构造树形模板 |
|||
* |
|||
* @param qywxDepartment |
|||
* @param children |
|||
* @return |
|||
*/ |
|||
public Map<String, Object> InitTree(qywxDepartment qywxDepartment, List<Object> children) { |
|||
if (qywxDepartment != null) { |
|||
Map<String, Object> map = new HashMap<>(); |
|||
map.put("title", qywxDepartment.getName()); |
|||
map.put("id", qywxDepartment.getId()); |
|||
map.put("children", children); |
|||
return map; |
|||
} else { |
|||
return null; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 用于创建部门树结构 |
|||
*/ |
|||
class InitDepartmentTree implements Callable<Object> { |
|||
|
|||
/** |
|||
* 用于开启线程的部门列表 |
|||
*/ |
|||
List<qywxDepartment> qywxDepartmentList; |
|||
|
|||
/** |
|||
* 全部部门列表 |
|||
*/ |
|||
List<qywxDepartment> qywxDepartmentListAll; |
|||
|
|||
public InitDepartmentTree(List<qywxDepartment> qywxDepartmentList, List<qywxDepartment> qywxDepartmentListAll) { |
|||
this.qywxDepartmentList = qywxDepartmentList; |
|||
this.qywxDepartmentListAll = qywxDepartmentListAll; |
|||
} |
|||
|
|||
@Override |
|||
public Object call() throws Exception { |
|||
ExecutorService exs = Executors.newFixedThreadPool(qywxDepartmentList.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 < qywxDepartmentList.size(); i++) { |
|||
qywxDepartment qywxDepartment = qywxDepartmentList.get(i); |
|||
// 开启线程
|
|||
Future<Object> submit = completionService.submit(new buildDepartmentTree(qywxDepartmentListAll, qywxDepartment)); |
|||
futureList.add(submit); |
|||
} |
|||
|
|||
// 收集结果
|
|||
for (int i = 0; i < qywxDepartmentList.size(); i++) { |
|||
Object result = null; |
|||
try { |
|||
result = completionService.take().get(); |
|||
} catch (InterruptedException | ExecutionException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
list.add(result); |
|||
} |
|||
return list; |
|||
} |
|||
} |
|||
|
|||
/** |
|||
* 构造树结构对象 |
|||
*/ |
|||
class buildDepartmentTree implements Callable<Object> { |
|||
|
|||
// 所有部门列表
|
|||
List<qywxDepartment> qywxDepartmentList; |
|||
// 当前部门
|
|||
qywxDepartment qywxDepartment; |
|||
|
|||
public buildDepartmentTree(List<qywxDepartment> qywxDepartmentList, qywxDepartment qywxDepartment) { |
|||
this.qywxDepartmentList = qywxDepartmentList; |
|||
this.qywxDepartment = qywxDepartment; |
|||
} |
|||
|
|||
@Override |
|||
public Object call() throws Exception { |
|||
List<Object> children = new ArrayList<>(); |
|||
for (qywxDepartment department : qywxDepartmentList) { |
|||
// 如果该部门是当前部门的子部门
|
|||
if (Integer.compare(qywxDepartment.getId(), department.getParentid()) == 0) { |
|||
Map<String, Object> stringObjectMap = InitTree(department, null); |
|||
children.add(stringObjectMap); |
|||
} |
|||
} |
|||
return InitTree(qywxDepartment, children); |
|||
} |
|||
} |
|||
|
|||
|
|||
} |
|||
@ -1,174 +0,0 @@ |
|||
package com.dreamchaser.depository_manage; |
|||
|
|||
import com.dreamchaser.depository_manage.entity.MaterialAndPlace; |
|||
import com.dreamchaser.depository_manage.entity.SplitInfo; |
|||
import com.dreamchaser.depository_manage.entity.SplitInventory; |
|||
import com.dreamchaser.depository_manage.mapper.PlaceMapper; |
|||
import com.dreamchaser.depository_manage.mapper.SplitUnitMapper; |
|||
import com.dreamchaser.depository_manage.service.SplitUnitService; |
|||
import org.junit.Test; |
|||
import org.junit.runner.RunWith; |
|||
import org.springframework.beans.factory.annotation.Autowired; |
|||
import org.springframework.boot.test.context.SpringBootTest; |
|||
import org.springframework.test.context.junit4.SpringRunner; |
|||
|
|||
import java.util.HashMap; |
|||
import java.util.Map; |
|||
|
|||
@SpringBootTest |
|||
@RunWith(SpringRunner.class) |
|||
public class TestQywxSplitInventoryAll { |
|||
|
|||
@Autowired |
|||
SplitUnitMapper splitUnitMapper; |
|||
|
|||
@Autowired |
|||
PlaceMapper placeMapper; |
|||
|
|||
|
|||
@Test |
|||
public void Test(){ |
|||
Map<String,Object> map = new HashMap<>(); |
|||
map.put("mid","6"); |
|||
map.put("pid","8"); |
|||
MaterialAndPlace placeAndMaterialByMidAndPid = placeMapper.findPlaceAndMaterialByMidAndPid(map); |
|||
int allInventoryForSplitInfo = findAllInventoryForSplitInfo(-1, placeAndMaterialByMidAndPid, 4, 0, true); |
|||
System.out.println(allInventoryForSplitInfo); |
|||
} |
|||
|
|||
|
|||
public int findAllInventoryForSplitInfo(Integer splitInfoId, MaterialAndPlace materialAndPlace, Integer baseSplitInfoId, int saveQuantity, boolean allQuantityFlag) { |
|||
if (allQuantityFlag) { |
|||
|
|||
// 用于标志是否第一次计算
|
|||
boolean flag = false; |
|||
|
|||
// 获取当前基础单位
|
|||
SplitInfo baseSplitInfo = splitUnitMapper.findSplitInfoById(baseSplitInfoId); |
|||
|
|||
// 获取当前基础单位的库存
|
|||
Map<String, Object> paramForSplitInventory = new HashMap<>(); |
|||
paramForSplitInventory.put("iid", materialAndPlace.getId()); |
|||
|
|||
// 如果当前获取的为对应基础单位的所有库存
|
|||
// 如果是第一次计算
|
|||
|
|||
if (Integer.compare(saveQuantity, 0) == 0) { |
|||
// 如果是第一次计算
|
|||
|
|||
|
|||
paramForSplitInventory.put("sid", baseSplitInfoId); |
|||
|
|||
// 当前基础单位的库存
|
|||
SplitInventory baseSplitInventory = splitUnitMapper.findSplitInventoryByIidAndSid(paramForSplitInventory); |
|||
if (baseSplitInventory != null) { |
|||
saveQuantity += baseSplitInventory.getSaveQuantity(); |
|||
} |
|||
} |
|||
if (Integer.compare(-1, splitInfoId) != 0) { |
|||
flag = true; |
|||
// 获取当前记录的子记录
|
|||
SplitInfo splitInfoByParentId = splitUnitMapper.findSplitInfoByParentId(splitInfoId); |
|||
paramForSplitInventory.put("sid", splitInfoId); |
|||
SplitInventory splitInventoryByIidAndSid = splitUnitMapper.findSplitInventoryByIidAndSid(paramForSplitInventory); |
|||
if (splitInventoryByIidAndSid != null) { |
|||
saveQuantity += splitInventoryByIidAndSid.getSaveQuantity() * splitInfoByParentId.getQuantity(); |
|||
} |
|||
} |
|||
|
|||
if (baseSplitInfo.getParentId() != null && !flag) { |
|||
// 如果有父级且是第一次
|
|||
|
|||
// 获取其父级
|
|||
SplitInfo parentSplitInfo = splitUnitMapper.findSplitInfoById(baseSplitInfo.getParentId()); |
|||
return findAllInventoryForSplitInfo(parentSplitInfo.getId(), materialAndPlace, baseSplitInfoId, saveQuantity, allQuantityFlag); |
|||
} else { |
|||
if (flag) { |
|||
// 如果不是第一次
|
|||
|
|||
// 获取当前的拆单记录
|
|||
SplitInfo splitInfo = splitUnitMapper.findSplitInfoById(splitInfoId); |
|||
if (splitInfo.getParentId() != null) { |
|||
SplitInfo parentSplitInfo = splitUnitMapper.findSplitInfoById(splitInfo.getParentId()); |
|||
return findAllInventoryForSplitInfo(parentSplitInfo.getId(), materialAndPlace, baseSplitInfoId, saveQuantity, allQuantityFlag); |
|||
} else { |
|||
int splitInfoScaleQuantity = findSplitInfoScaleQuantity(baseSplitInfo, -1); |
|||
return saveQuantity + materialAndPlace.getQuantity() * splitInfoScaleQuantity; |
|||
} |
|||
|
|||
} else { |
|||
int splitInfoScaleQuantity = findSplitInfoScaleQuantity(baseSplitInfo, -1); |
|||
return saveQuantity + materialAndPlace.getQuantity() * splitInfoScaleQuantity; |
|||
} |
|||
} |
|||
|
|||
|
|||
} |
|||
else { |
|||
// 如果不是获取所有库存
|
|||
// 获取当前基础单位
|
|||
SplitInfo baseSplitInfo = splitUnitMapper.findSplitInfoById(baseSplitInfoId); |
|||
|
|||
// 获取当前基础单位的库存
|
|||
Map<String, Object> paramForSplitInventory = new HashMap<>(); |
|||
paramForSplitInventory.put("iid", materialAndPlace.getId()); |
|||
|
|||
// 如果当前获取的为对应基础单位的所有库存
|
|||
if (Integer.compare(saveQuantity, 0) == 0) { |
|||
// 如果是第一次计算
|
|||
|
|||
paramForSplitInventory.put("sid", baseSplitInfoId); |
|||
|
|||
// 当前基础单位的库存
|
|||
SplitInventory baseSplitInventory = splitUnitMapper.findSplitInventoryByIidAndSid(paramForSplitInventory); |
|||
saveQuantity += baseSplitInventory.getSaveQuantity(); |
|||
} |
|||
// 获取当前拆单记录与基础拆单记录之间的进制
|
|||
|
|||
int splitInfoScaleQuantity = findSplitInfoScaleQuantity(baseSplitInfo, splitInfoId); |
|||
paramForSplitInventory.put("sid", splitInfoId); |
|||
// 获取当前拆单记录的库存
|
|||
SplitInventory splitInventory = splitUnitMapper.findSplitInventoryByIidAndSid(paramForSplitInventory); |
|||
saveQuantity += splitInventory.getSaveQuantity() * splitInfoScaleQuantity; |
|||
|
|||
// 获取当前的子类
|
|||
SplitInfo splitInfoByParentId = splitUnitMapper.findSplitInfoByParentId(splitInfoId); |
|||
if (splitInfoByParentId != null && Integer.compare(splitInfoByParentId.getId(), baseSplitInfoId) != 0) { |
|||
// 如果有子类
|
|||
return findAllInventoryForSplitInfo(splitInfoByParentId.getId(), materialAndPlace, baseSplitInfoId, saveQuantity, allQuantityFlag); |
|||
} else { |
|||
// 如果没有
|
|||
return saveQuantity; |
|||
} |
|||
|
|||
|
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
public int findSplitInfoScaleQuantity(SplitInfo splitInfo, Integer parentSplitInfoId) { |
|||
int quantity = 1; // 定义进制
|
|||
if (parentSplitInfoId != null && Integer.compare(-1, parentSplitInfoId) != 0) { |
|||
// 如果待查询的父级不是顶级
|
|||
if (Integer.compare(splitInfo.getParentId(), parentSplitInfoId) == 0) { |
|||
// 如果当前拆单记录是目标拆单单位
|
|||
quantity *= splitInfo.getQuantity(); |
|||
|
|||
return quantity; |
|||
} else { |
|||
SplitInfo splitInfoById = splitUnitMapper.findSplitInfoById(splitInfo.getParentId()); |
|||
return quantity * findSplitInfoScaleQuantity(splitInfoById, parentSplitInfoId); |
|||
} |
|||
} else { |
|||
quantity *= splitInfo.getQuantity(); |
|||
if (splitInfo.getParentId() != null) { |
|||
SplitInfo splitInfoById = splitUnitMapper.findSplitInfoById(splitInfo.getParentId()); |
|||
return quantity * findSplitInfoScaleQuantity(splitInfoById, parentSplitInfoId); |
|||
} else { |
|||
return quantity; |
|||
} |
|||
} |
|||
} |
|||
|
|||
} |
|||
Loading…
Reference in new issue