Browse Source

完成库存旭日图设计测试

lwx_dev
erdanergou 2 years ago
parent
commit
ebd744cc45
  1. 4
      src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java
  2. 11
      src/main/java/com/dreamchaser/depository_manage/entity/SplitInventoryView.java
  3. 10
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java
  4. 15
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml
  5. 3
      src/main/java/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.xml
  6. 2
      src/main/java/com/dreamchaser/depository_manage/service/DepositoryRecordService.java
  7. 8
      src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java
  8. 97
      src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java
  9. 42
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java
  10. 4
      src/main/resources/templates/pages/depository/table-stock.html
  11. 235
      src/test/java/com/dreamchaser/depository_manage/InventorySunburstDataTest.java
  12. 34
      src/test/java/com/dreamchaser/depository_manage/SunburstChartTest.java

4
src/main/java/com/dreamchaser/depository_manage/controller/DepositoryRecordController.java

@ -2605,13 +2605,15 @@ public class DepositoryRecordController {
depositoryId = depositoryIdForUser.get(0);
}
}
// 获取当前month月与下个月的月初
Map<String, Long> timeSpaceMap = DateUtil.getThisMonthTimeSpace(month);
Long start = timeSpaceMap.get("start");
Long end = timeSpaceMap.get("end");
// 获取所有顶级物料类型
List<MaterialType> materialTypeNoParent = materialTypeService.findMaterialTypeNoParent();
Map<String, Object> data = depositoryRecordService.getSunBurstDataByForApplication(dateName, type, start, end, materialTypeNoParent, depositoryId);
Map<String, Object> data = new HashMap<>();
data = depositoryRecordService.getSunBurstDataByForApplication(dateName, type, start, end, materialTypeNoParent, depositoryId);
return new RestResponse(data);
}

11
src/main/java/com/dreamchaser/depository_manage/entity/SplitInventoryView.java

@ -50,7 +50,7 @@ public class SplitInventoryView {
/**
* 旧单位
*/
private String oldUnit ;
private String oldUnit;
/**
* 新单位
*/
@ -58,10 +58,15 @@ public class SplitInventoryView {
/**
* 物料名称
*/
private String mname ;
private String mname;
/**
* 仓库名称
*/
private String dname ;
private String dname;
/**
* 物料类型
*/
private Long mtId;
}

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

@ -423,12 +423,20 @@ public interface MaterialMapper {
/**
* 添加当前批次下的物料与生产日期对应
*
* @param map
* @param map 查询数据
* @return
*/
Integer addMaterialAndProducedDate(Map<String, Object> map);
/**
* 根据仓库与物料类型获取库存数量
* @param map 查询数据
* @return
*/
Integer calInventoryForDepositoryAndMt(Map<String,Object> map);
/**
* 根据物料id查询所有物料与生产日期的对应
*

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

@ -1352,5 +1352,20 @@
</foreach>
</update>
<select id="calInventoryForDepositoryAndMt" parameterType="map" resultType="int">
select ifnull(sum(quantity),0)
from findinventory
where 1 = 1
<if test="depositoryId != null and depository != ''">
and depositoryId = #{depositoryId}
</if>
<if test="list != null and list != ''">
and mtid in
<foreach collection="list" index="index" item="typeId" open="(" separator="," close=")">
#{typeId}
</foreach>
</if>
</select>
</mapper>

3
src/main/java/com/dreamchaser/depository_manage/mapper/SplitUnitMapper.xml

@ -51,6 +51,7 @@
<id column="sid" property="sid" jdbcType="INTEGER" />
<id column="mpId" property="mpId" jdbcType="INTEGER" />
<id column="siQuantity" property="siQuantity" jdbcType="INTEGER" />
<id column="mtId" property="mtId" jdbcType="BIGINT" />
<id column="mid" property="mid" jdbcType="INTEGER" />
<id column="depositoryId" property="depositoryId" jdbcType="INTEGER" />
<id column="iid" property="iid" jdbcType="INTEGER" />
@ -76,7 +77,7 @@
</sql>
<sql id="splitInventoryForView">
id,sid,mpId,siQuantity,mid,depositoryId,iid,pid,sstate,scale,oldUnit,newUnit,mname,dname
id,sid,mpId,siQuantity,mid,depositoryId,iid,pid,sstate,scale,oldUnit,newUnit,mname,dname,mtId
</sql>
<select id="findSplitInfoByMidAndUnit" parameterType="map" resultMap="splitInfoMap">

2
src/main/java/com/dreamchaser/depository_manage/service/DepositoryRecordService.java

@ -273,7 +273,7 @@ public interface DepositoryRecordService {
/**
* 根据条件获取月份中的仓库库存
* 根据条件获取月份仓库中的出入库
*
* @param map 条件
* @return

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

@ -446,4 +446,12 @@ public interface MaterialService {
* @return
*/
Double findInventorySumForDepository(Integer depositoryId);
/**
* 根据条件获取月份仓库中的库存数
*
* @param map 条件
* @return
*/
Double calMaterialTypeTopCount(Map<String, Object> map);
}

97
src/main/java/com/dreamchaser/depository_manage/service/impl/DepositoryRecordServiceImpl.java

@ -5886,7 +5886,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
// 去掉当天数据
doubleList.remove(doubleList.size() - 1);
redisPool.getRedisTemplateByDb(15).opsForHash().put(redisKey, valueKey, JSONObject.toJSONString(doubleList));
redisPool.getRedisTemplateByDb(15).expire(redisKey,DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
redisPool.getRedisTemplateByDb(15).expire(redisKey, DateUtil.getSecondsNextEarlyMorning(), TimeUnit.SECONDS);
}
show_data.put("dayNames", dayNames);
return show_data;
@ -5895,9 +5895,10 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
/**
* 用于获取库存折线图数据
*
* @param depositoryId 待获取仓库id
* @param dateType 日期类型
* @param echartType 图表类型
* @param dateType 日期类型
* @param echartType 图表类型
* @return
*/
public Map<Object, Object> getLineOrBarChartDataForInventory(Integer depositoryId, String dateType, String echartType) {
@ -6090,12 +6091,17 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
*/
public Map<String, Object> getSunBurstDataByForApplication(String name, String type, Long start, Long end, List<MaterialType> materialTypeAll, Integer depositoryId) {
Map<String, Object> result = new HashMap<>();
int maxThreadSize = materialTypeAll.size();
int threadSize = Runtime.getRuntime().availableProcessors();
if (maxThreadSize < threadSize) {
maxThreadSize = threadSize * 2;
}
ExecutorService exs = new ThreadPoolExecutor(threadSize, maxThreadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(maxThreadSize));
// 结果集
@ -6104,13 +6110,20 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
List<Object> resultForData = new ArrayList<>();
int openThredSize = 0;
for (MaterialType materialType : materialTypeAll) {
Future<Object> future = null;
if ("3".equals(type)) {
future = completionService.submit(new getSunBurstDataForInventoryByDepository(materialType, depositoryId));
} else {
future = completionService.submit(new getSunBurstDataForApplicationByDepository(type, start, end, materialType, depositoryId));
}
openThredSize++;
// 测试
Future<Object> future = completionService.submit(new getSunBurstDataForApplicationByDepository(type, start, end, materialType, depositoryId));
futureList.add(future);
}
double sum = 0.0;
for (int i = 0; i < materialTypeAll.size(); i++) {
for (int i = 0; i < openThredSize; i++) {
Object obj = null;
try {
obj = completionService.take().get();
@ -6122,9 +6135,9 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
sum += ObjectFormatUtil.toDouble(ObjectFormatUtil.objToMap(obj, String.class, Object.class).get("value"));
}
}
result.put("children", resultForData);
result.put("name", name);
result.remove("month");
result.put("value", sum);
// 用于生产随机的颜色
Random random = new Random();
@ -6138,7 +6151,6 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
}
/**
* 用于获取当前类别名称下当前月份的出入库的旭日图数据
*
@ -6220,6 +6232,25 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
return result;
}
public Map<String, Object> createLineOrBarMap(String echartType) {
Map<String, Object> map = new HashMap<>();
if ("line".equals(echartType)) {
map.put("type", "line");
Map<String, Object> areaStyleItem = new HashMap<>();
map.put("areaStyle", areaStyleItem);
} else if ("bar".equals(echartType)) {
map.put("type", "bar");
Map<String, Object> emphasisItem = new HashMap<>();
emphasisItem.put("focus", "series");
map.put("emphasis", emphasisItem);
Map<String, Object> labelItem = new HashMap<>();
labelItem.put("show", true);
labelItem.put("position", "inside");
map.put("label", labelItem);
}
return map;
}
/**
* 用于计算当前主记录下的总额与数量
*/
@ -6274,7 +6305,7 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
}
/**
* 用于具体执行查询旭日图的多线程类
* 用于具体执行查询出入库旭日图的多线程类
*/
class getSunBurstDataForApplicationByDepository implements Callable<Object> {
@ -6317,24 +6348,42 @@ public class DepositoryRecordServiceImpl implements DepositoryRecordService {
}
}
/**
* 用于具体执行查询库存旭日图的多线程类
*/
class getSunBurstDataForInventoryByDepository implements Callable<Object> {
public Map<String,Object> createLineOrBarMap(String echartType){
Map<String, Object> map = new HashMap<>();
if ("line".equals(echartType)) {
map.put("type", "line");
Map<String, Object> areaStyleItem = new HashMap<>();
map.put("areaStyle", areaStyleItem);
} else if ("bar".equals(echartType)) {
map.put("type", "bar");
Map<String, Object> emphasisItem = new HashMap<>();
emphasisItem.put("focus", "series");
map.put("emphasis", emphasisItem);
Map<String, Object> labelItem = new HashMap<>();
labelItem.put("show", true);
labelItem.put("position", "inside");
map.put("label", labelItem);
MaterialType materialType;
Integer depositoryId;
public getSunBurstDataForInventoryByDepository(MaterialType materialType, Integer depositoryId) {
this.materialType = materialType;
this.depositoryId = depositoryId;
}
@Override
public Object call() throws Exception {
Map<String, Object> map = new HashMap<>();
map.put("depositoryId", depositoryId);
map.put("oldId", materialType.getOldId());
Map<String, Object> result = new HashMap<>();
List<Long> allMtByParent = findChildForMaterialTypeByParent(materialType);
map.put("list", allMtByParent);
Integer integer = materialMapper.calInventoryForDepositoryAndMt(map);
Double materialCountByMonth = ObjectFormatUtil.divide(integer, 100.0, 2);
result.put("name", materialType.getTname());
result.put("value", materialCountByMonth);
Map<String, String> itemStyle = new HashMap<>();
// 用于生产随机的颜色
Random random = new Random();
int r = random.nextInt(256);
int g = random.nextInt(256);
int b = random.nextInt(256);
itemStyle.put("color", "rgb(" + r + "," + g + "," + b + ")");
result.put("itemStyle", itemStyle);
return result;
}
return map;
}

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

@ -2312,6 +2312,7 @@ public class MaterialServiceImpl implements MaterialService {
}
}
// 根据类别id获取子类(盘点专用)
public List<Object> findChildForMaterialTypeByParent(Long id, String mname, String depositoryId, String placeId) {
Map<String, Object> param = new HashMap<>();
@ -2341,6 +2342,24 @@ public class MaterialServiceImpl implements MaterialService {
}
}
// 根据物料类型获取其所有子类型Id
public List<Long> findChildForMaterialTypeByParent(MaterialType mt) {
List<Long> result = new ArrayList<>();
result.add(mt.getOldId());
List<Long> parentIdList = new ArrayList<>();
parentIdList.add(mt.getOldId());
List<MaterialType> materialTypeAll = materialTypeMapper.findMaterialTypeAll();
for (MaterialType materialType : materialTypeAll) {
Long parentId = materialType.getParentId();
if (parentIdList.contains(parentId)) {
parentIdList.add(materialType.getOldId());
result.add(materialType.getOldId());
}
}
return result;
}
// 用于测试构造属性框
public List<Object> InitTreeMenus_Test() {
List<Object> list = new ArrayList<>();
@ -2749,6 +2768,7 @@ public class MaterialServiceImpl implements MaterialService {
/**
* 获取当前仓库的库存总额
*
* @param depositoryId 带查询仓库id
* @return
*/
@ -2775,6 +2795,28 @@ public class MaterialServiceImpl implements MaterialService {
return result;
}
/**
* 根据条件获取月份仓库中的库存数
*
* @param map 条件
* @return
*/
@Override
public Double calMaterialTypeTopCount(Map<String, Object> map) {
Object o = map.get("oldId");
List<Long> allMtByParent = null;
if (o != null) {
String oldId = String.valueOf(o);
MaterialType mt = materialTypeMapper.findMaterialTypeByOldId(ObjectFormatUtil.toLong(oldId));
allMtByParent = findChildForMaterialTypeByParent(mt);
map.put("list", allMtByParent);
}
double sumCount = 0;
Integer integer = materialMapper.calInventoryForDepositoryAndMt(map);
sumCount = ObjectFormatUtil.divide(integer, 100.0, 2);
return sumCount;
}
List<MaterialAndPlaceForViewP> packMpvList(List<MaterialAndPlaceForViewP> materialAndPlaceForViewList, Map<String, Object> map) {
for (MaterialAndPlaceForViewP mpv : materialAndPlaceForViewList

4
src/main/resources/templates/pages/depository/table-stock.html

@ -477,7 +477,7 @@
$("#showEchart").append(listItem)
}
else if(obj.event === "showSunburstEchart"){
/*layer.open({
layer.open({
type: 2,
offset: 'r',
anim: 'slideLeft', // 从右往左
@ -487,7 +487,7 @@
shadeClose: true,
id: 'applicationOutInfoForLeft',
content: '/sunburstEchartForTable?type=3',
});*/
});
}
else if(obj.event === "showLineEchart"){
layer.open({

235
src/test/java/com/dreamchaser/depository_manage/InventorySunburstDataTest.java

@ -44,30 +44,174 @@ public class InventorySunburstDataTest {
@Test
public void main() {
String type = "2";
String dayName = "6月";
String dayNumberString = dayName.split("月")[0];
Map<String, Object> sunBurstDataForInventoryByMonth = getSunBurstDataForInventoryByMonth(dayName, "办公用品", 40);
System.out.println(JSONObject.toJSONString(sunBurstDataForInventoryByMonth));
// int dayNumber = Integer.parseInt(dayNumberString);
// 获取本月之前的月份
// Map<String, Object> previousMonth = DateUtil.getPreviousMonth();
// 获取月份的时间戳
// List<Long> months = ObjectFormatUtil.objToList(previousMonth.get("months"), Long.class);
// 获取开始时间
// Long start = months.get(months.size() - dayNumber - 1);
// 获取结束时间
// Long end = months.get(0);
// List<MaterialType> materialTypeNoParent = materialTypeService.findMaterialTypeNoParent();
// Map<String, Object> sunBurstDataForApplication = getSunBurstDataForApplication(dayName, "1", start, end, materialTypeNoParent, 40);
// System.out.println(sunBurstDataForApplication);
}
/**
* 用于获取库存旭日图数据
* @param dayName 待获取日期名称
* @param mtName 待查询物料类型
* @param depositoryId 待查询仓库
* @return
*/
public Map<String, Object> getSunBurstDataForInventoryByMonth(String dayName, String mtName, Integer depositoryId) {
String dayNumberString = dayName.split("月")[0];
int dayNumber = Integer.parseInt(dayNumberString);
// 获取本月之前的月份
Map<String, Object> previousMonth = DateUtil.getPreviousMonth();
// 获取月份的时间戳
List<Long> months = ObjectFormatUtil.objToList(previousMonth.get("months"), Long.class);
List<MaterialType> materialTypeNoParent = materialTypeService.findMaterialTypeNoParent();
List<MaterialType> materialTypeList = new ArrayList<>();
Map<String, Object> sourceListTask = getSunBurstDataForApplication("7月", type, months.get(2), months.get(1), materialTypeNoParent);
System.out.println(JSONObject.toJSONString(sourceListTask));
// 获取开始时间
Long start = months.get(months.size() - dayNumber - 1);
// 获取结束时间
Long end = months.get(0);
}
/**
* 用于执行获取旭日图数据的线程类
*/
class TemporaryClass implements Callable<Map<String, Object>> {
private String type;
private List<MaterialType> materialTypeList;
public TemporaryClass(String type, List<MaterialType> materialTypeList) {
this.type = type;
this.materialTypeList = materialTypeList;
}
@Override
public Map<String, Object> call() throws Exception {
Map<String, Object> data = getSunBurstDataForApplication(dayName, type, start, end, materialTypeList, depositoryId);
return data;
}
}
// 定义线程池
ExecutorService exs = new ThreadPoolExecutor(3, 6, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(6));
if (mtName == null || "".equals(mtName)) {
// 获取要执行的物料类型列表
materialTypeList = materialTypeService.findMaterialTypeNoParent();
} else {
List<MaterialType> materialTypeByNames = materialTypeService.findMaterialTypeByName(mtName);
MaterialType materialType = null;
if (materialTypeByNames.size() > 0) {
materialType = materialTypeByNames.get(0);
} else {
throw new MyException("错误,不存在当前名称的类型");
}
materialTypeList = materialTypeService.findChildForMaterialTypeByParent(materialType.getOldId());
}
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
CompletionService<Map<String, Object>> completionService = new ExecutorCompletionService<Map<String, Object>>(exs);
// 获取入库的旭日图数据
Future<Map<String, Object>> applicationInThread = completionService.submit(new TemporaryClass("1", materialTypeList));
// 获取出库的旭日图数据
Future<Map<String, Object>> applicationOutThread = completionService.submit(new TemporaryClass("2", materialTypeList));
// 获取当前库存的旭日图数据
Future<Map<String, Object>> InventoryThread = completionService.submit(new TemporaryClass("3", materialTypeList));
Map<String, Object> result = new HashMap<String, Object>();
try {
// 获取入库的旭日图数据列表
List<Object> applicationInDataList = ObjectFormatUtil.objToList(applicationInThread.get().get("children"), Object.class);
// 获取出库的旭日图数据列表
List<Object> applicationOutDataList = ObjectFormatUtil.objToList(applicationOutThread.get().get("children"), Object.class);
// 获取库存的旭日图数据列表
List<Object> inventoryDataList = ObjectFormatUtil.objToList(InventoryThread.get().get("children"), Object.class);
PublicConfig.closeThreadPool(exs);
// 用于存储入库时的旭日图具体数据
Map<String, Double> applicationInData = new HashMap<>();
// 用于存储出库时的旭日图具体数据
Map<String, Double> applicationOutData = new HashMap<>();
// 用于存储库存时的旭日图具体数据
Map<String, Double> inventoryData = new HashMap<>();
for (int i = 0; i < applicationInDataList.size(); i++) {
// 循环获取所有出库、入库、库存的旭日图对应类型与其值
Map<String, Object> applicationInDataMap = ObjectFormatUtil.objToMap(applicationInDataList.get(i), String.class, Object.class);
applicationInData.put((String) applicationInDataMap.get("name"), ObjectFormatUtil.toDouble(applicationInDataMap.get("value")));
Map<String, Object> applicationOutDataMap = ObjectFormatUtil.objToMap(applicationOutDataList.get(i), String.class, Object.class);
applicationOutData.put((String) applicationOutDataMap.get("name"), ObjectFormatUtil.toDouble(applicationOutDataMap.get("value")));
Map<String, Object> inventoryDataMap = ObjectFormatUtil.objToMap(inventoryDataList.get(i), String.class, Object.class);
inventoryData.put((String) inventoryDataMap.get("name"), ObjectFormatUtil.toDouble(inventoryDataMap.get("value")));
}
double sumInventory = 0.0;
List<Object> resultData = new ArrayList<>();
// 用于生产随机的颜色
Random random = new Random();
for (String key : inventoryData.keySet()) {
Map<String, Object> resultDataItem = new HashMap<>();
// 获取当前类型库存
double value = inventoryData.get(key);
// 获取当前类型入库数
double inQuantity = applicationInData.get(key);
// 获取当前类型出库数
double outQuantity = applicationOutData.get(key);
// 获取计算后的库存(库存+出库-入库)
double inventory = ObjectFormatUtil.subtract(ObjectFormatUtil.sum(value, outQuantity), inQuantity);
resultDataItem.put("name", key);
resultDataItem.put("value", inventory);
Map<String, String> itemStyle = new HashMap<>();
int r = random.nextInt(256);
int g = random.nextInt(256);
int b = random.nextInt(256);
itemStyle.put("color", "rgb(" + r + "," + g + "," + b + ")");
resultDataItem.put("itemStyle", itemStyle);
// 更新当前类型库存数
sumInventory = ObjectFormatUtil.sum(sumInventory, inventory);
resultData.add(resultDataItem);
}
result.put("children", resultData);
result.put("value", sumInventory);
result.put("name", dayName);
Map<String, String> itemStyle = new HashMap<>();
int r = random.nextInt(256);
int g = random.nextInt(256);
int b = random.nextInt(256);
itemStyle.put("color", "rgb(" + r + "," + g + "," + b + ")");
result.put("itemStyle", itemStyle);
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
return result;
}
/**
* 用于获取出入库的旭日图数据
* 用于获取旭日图数据
*
* @param dayName 当前月份名称
* @param type 查看类型
* @param type 查看类型(1入库2出库3库存)
* @param start 开始时间
* @param end 结束时间
* @param materialTypeAll 当前查看物料类型
* @param depositoryId 当前查看仓库id
* @return
*/
public Map<String, Object> getSunBurstDataForApplication(String dayName, String type, Long start, Long end, List<MaterialType> materialTypeAll) {
public Map<String, Object> getSunBurstDataForApplication(String dayName, String type, Long start, Long end, List<MaterialType> materialTypeAll, Integer depositoryId) {
Map<String, Object> result = new HashMap<>();
@ -75,6 +219,10 @@ public class InventorySunburstDataTest {
int threadSize = Runtime.getRuntime().availableProcessors();
if (maxThreadSize < threadSize) {
maxThreadSize = threadSize * 2;
}
ExecutorService exs = new ThreadPoolExecutor(threadSize, maxThreadSize, 100, TimeUnit.SECONDS, new LinkedBlockingQueue<>(maxThreadSize));
// 结果集
@ -83,17 +231,24 @@ public class InventorySunburstDataTest {
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
List<Object> resultForData = new ArrayList<>();
int openThreadSize = 0;
for (MaterialType materialType : materialTypeAll) {
// 测试
Future<Object> future = completionService.submit(new getSunBurstDataForApplicationByDepository(type, start, end, materialType));
Future<Object> future = null;
if ("3".equals(type)) {
future = completionService.submit(new getSunBurstDataForInventoryByDepository(materialType, depositoryId));
} else {
future = completionService.submit(new getSunBurstDataForApplicationByDepository(type, start, end, materialType, depositoryId));
}
futureList.add(future);
openThreadSize++;
}
double sum = 0.0;
for (int i = 0; i < materialTypeAll.size(); i++) {
for (int i = 0; i < openThreadSize; i++) {
Object obj = null;
try {
obj = completionService.take().get();
sum = ObjectFormatUtil.sum(sum,ObjectFormatUtil.toDouble(ObjectFormatUtil.objToMap(obj,String.class,Object.class).get("value")));
sum = ObjectFormatUtil.sum(sum, ObjectFormatUtil.toDouble(ObjectFormatUtil.objToMap(obj, String.class, Object.class).get("value")));
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
@ -111,6 +266,7 @@ public class InventorySunburstDataTest {
int b = random.nextInt(256);
itemStyle.put("color", "rgb(" + r + "," + g + "," + b + ")");
result.put("itemStyle", itemStyle);
result.put("sunburstDataType", type);
return result;
}
@ -124,7 +280,7 @@ public class InventorySunburstDataTest {
* @param mtName 类别名称
* @return
*/
public Map<String, Object> getSunBurstDataByMtName(String dayName, String type, Long start, Long end, String mtName) {
public Map<String, Object> getSunBurstDataByMtName(String dayName, String type, Long start, Long end, String mtName, Integer depositoryId) {
List<MaterialType> materialTypeByNames = materialTypeService.findMaterialTypeByName(mtName);
MaterialType materialType = null;
if (materialTypeByNames.size() > 0) {
@ -150,7 +306,7 @@ public class InventorySunburstDataTest {
int runThreadSize = 0;
for (MaterialType value : childMaterialTypeList) {
Future<Object> submit = completionService.submit(new getSunBurstDataForApplicationByDepository(type, start, end, value));
Future<Object> submit = completionService.submit(new getSunBurstDataForApplicationByDepository(type, start, end, value, depositoryId));
runThreadSize++;
futureList.add(submit);
}
@ -162,7 +318,7 @@ public class InventorySunburstDataTest {
try {
obj = completionService.take().get();
resultForData.add(obj);
sum = ObjectFormatUtil.sum(sum,ObjectFormatUtil.toDouble(ObjectFormatUtil.objToMap(obj,String.class,Object.class).get("value")));
sum = ObjectFormatUtil.sum(sum, ObjectFormatUtil.toDouble(ObjectFormatUtil.objToMap(obj, String.class, Object.class).get("value")));
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
@ -183,10 +339,8 @@ public class InventorySunburstDataTest {
return result;
}
/**
* 用于具体执行查询旭日图的多线程类
* 用于具体执行查询出入库旭日图的多线程类
*/
class getSunBurstDataForApplicationByDepository implements Callable<Object> {
@ -195,26 +349,23 @@ public class InventorySunburstDataTest {
Long start;
Long end;
MaterialType materialType;
Integer depositoryId;
public getSunBurstDataForApplicationByDepository(String type, Long start, Long end, MaterialType materialType) {
public getSunBurstDataForApplicationByDepository(String type, Long start, Long end, MaterialType materialType, Integer depositoryId) {
this.type = type;
this.start = start;
this.end = end;
this.materialType = materialType;
this.depositoryId = depositoryId;
}
@Override
public Object call() throws Exception {
Map<String, Object> map = new HashMap<>();
map.put("type", ObjectFormatUtil.toInteger(type));
if (ObjectFormatUtil.toInteger(type) == 1) {
map.put("state", "已入库");
} else if (ObjectFormatUtil.toInteger(type) == 2) {
map.put("state", "已出库");
}
map.put("start", start);
map.put("end", end);
map.put("depositoryId", "41");
map.put("depository_id", depositoryId);
map.put("oldId", materialType.getOldId());
Map<String, Object> result = new HashMap<>();
Double materialCountByMonth = depositoryRecordService.calMaterialTypeTopCount(map);
@ -232,4 +383,40 @@ public class InventorySunburstDataTest {
}
}
/**
* 用于具体执行查询库存旭日图的多线程类
*/
class getSunBurstDataForInventoryByDepository implements Callable<Object> {
MaterialType materialType;
Integer depositoryId;
public getSunBurstDataForInventoryByDepository(MaterialType materialType, Integer depositoryId) {
this.materialType = materialType;
this.depositoryId = depositoryId;
}
@Override
public Object call() throws Exception {
Map<String, Object> map = new HashMap<>();
map.put("depositoryId", depositoryId);
map.put("oldId", materialType.getOldId());
Map<String, Object> result = new HashMap<>();
Double materialCountByMonth = materialService.calMaterialTypeTopCount(map);
result.put("name", materialType.getTname());
result.put("value", materialCountByMonth);
Map<String, String> itemStyle = new HashMap<>();
// 用于生产随机的颜色
Random random = new Random();
int r = random.nextInt(256);
int g = random.nextInt(256);
int b = random.nextInt(256);
itemStyle.put("color", "rgb(" + r + "," + g + "," + b + ")");
result.put("itemStyle", itemStyle);
return result;
}
}
}

34
src/test/java/com/dreamchaser/depository_manage/SunburstChartTest.java

@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
import com.dreamchaser.depository_manage.config.PublicConfig;
import com.dreamchaser.depository_manage.entity.MaterialType;
import com.dreamchaser.depository_manage.exception.MyException;
import com.dreamchaser.depository_manage.security.pool.RedisPool;
import com.dreamchaser.depository_manage.service.DepositoryRecordService;
import com.dreamchaser.depository_manage.service.DepositoryService;
import com.dreamchaser.depository_manage.service.MaterialService;
@ -38,9 +39,13 @@ public class SunburstChartTest {
@Autowired
DepositoryService depositoryService;
@Autowired
RedisPool redisPool;
@Test
public void main() {
String type = "2";
// 获取本月之前的月份
Map<String, Object> previousMonth = DateUtil.getPreviousMonth();
@ -51,7 +56,7 @@ public class SunburstChartTest {
// 结果集
List<MaterialType> materialTypeNoParent = materialTypeService.findMaterialTypeNoParent();
Map<String, Object> sourceListTask = getSunBurstDataForApplication("map", type, months.get(2), months.get(1), materialTypeNoParent);
Map<String, Object> sourceListTask = getSunBurstDataForApplication("7月", type, months.get(2), months.get(1), materialTypeNoParent, 56);
System.out.println(JSONObject.toJSONString(sourceListTask));
// 用于返回结果
@ -70,9 +75,11 @@ public class SunburstChartTest {
* @param materialTypeAll 当前查看物料类型
* @return
*/
public Map<String, Object> getSunBurstDataForApplication(String dayName, String type, Long start, Long end, List<MaterialType> materialTypeAll) {
public Map<String, Object> getSunBurstDataForApplication(String dayName, String type, Long start, Long end, List<MaterialType> materialTypeAll, Integer depositoryId) {
Map<String, Object> result = new HashMap<>();
List<Object> resultForData = new ArrayList<>();
double sum = 0.0;
int maxThreadSize = materialTypeAll.size();
@ -85,23 +92,25 @@ public class SunburstChartTest {
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
List<Object> resultForData = new ArrayList<>();
for (MaterialType materialType : materialTypeAll) {
// 测试
Future<Object> future = completionService.submit(new getSunBurstDataForApplicationByDepository(type, start, end, materialType));
Future<Object> future = completionService.submit(new getSunBurstDataForApplicationByDepository(type, start, end, materialType, depositoryId));
futureList.add(future);
}
double sum = 0.0;
for (int i = 0; i < materialTypeAll.size(); i++) {
Object obj = null;
try {
obj = completionService.take().get();
sum = ObjectFormatUtil.sum(sum,ObjectFormatUtil.toDouble(ObjectFormatUtil.objToMap(obj,String.class,Object.class).get("value")));
sum = ObjectFormatUtil.sum(sum, ObjectFormatUtil.toDouble(ObjectFormatUtil.objToMap(obj, String.class, Object.class).get("value")));
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
resultForData.add(obj);
}
result.put("children", resultForData);
result.put("name", dayName);
result.remove("month");
@ -127,7 +136,7 @@ public class SunburstChartTest {
* @param mtName 类别名称
* @return
*/
public Map<String, Object> getSunBurstDataByMtName(String dayName, String type, Long start, Long end, String mtName) {
public Map<String, Object> getSunBurstDataByMtName(String dayName, String type, Long start, Long end, String mtName, Integer depositoryId) {
List<MaterialType> materialTypeByNames = materialTypeService.findMaterialTypeByName(mtName);
MaterialType materialType = null;
if (materialTypeByNames.size() > 0) {
@ -153,7 +162,7 @@ public class SunburstChartTest {
int runThreadSize = 0;
for (MaterialType value : childMaterialTypeList) {
Future<Object> submit = completionService.submit(new getSunBurstDataForApplicationByDepository(type, start, end, value));
Future<Object> submit = completionService.submit(new getSunBurstDataForApplicationByDepository(type, start, end, value, depositoryId));
runThreadSize++;
futureList.add(submit);
}
@ -165,7 +174,7 @@ public class SunburstChartTest {
try {
obj = completionService.take().get();
resultForData.add(obj);
sum = ObjectFormatUtil.sum(sum,ObjectFormatUtil.toDouble(ObjectFormatUtil.objToMap(obj,String.class,Object.class).get("value")));
sum = ObjectFormatUtil.sum(sum, ObjectFormatUtil.toDouble(ObjectFormatUtil.objToMap(obj, String.class, Object.class).get("value")));
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
@ -187,7 +196,6 @@ public class SunburstChartTest {
}
/**
* 用于具体执行查询旭日图的多线程类
*/
@ -198,12 +206,14 @@ public class SunburstChartTest {
Long start;
Long end;
MaterialType materialType;
Integer depositoryId;
public getSunBurstDataForApplicationByDepository(String type, Long start, Long end, MaterialType materialType) {
public getSunBurstDataForApplicationByDepository(String type, Long start, Long end, MaterialType materialType, Integer depositoryId) {
this.type = type;
this.start = start;
this.end = end;
this.materialType = materialType;
this.depositoryId = depositoryId;
}
@Override
@ -217,7 +227,7 @@ public class SunburstChartTest {
}
map.put("start", start);
map.put("end", end);
map.put("depositoryId", "41");
map.put("depositoryId", depositoryId);
map.put("oldId", materialType.getOldId());
Map<String, Object> result = new HashMap<>();
Double materialCountByMonth = depositoryRecordService.calMaterialTypeTopCount(map);

Loading…
Cancel
Save