Browse Source

重构物料选择

lwx_dev
erdanergou 3 years ago
parent
commit
293f14b691
  1. 2
      src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java
  2. 6
      src/main/java/com/dreamchaser/depository_manage/controller/MaterialController.java
  3. 7
      src/main/java/com/dreamchaser/depository_manage/controller/PageController.java
  4. 6
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.java
  5. 48
      src/main/java/com/dreamchaser/depository_manage/mapper/MaterialMapper.xml
  6. 26
      src/main/java/com/dreamchaser/depository_manage/scheduled/SaticScheduleTask.java
  7. 5
      src/main/java/com/dreamchaser/depository_manage/service/DepositoryRecordService.java
  8. 15
      src/main/java/com/dreamchaser/depository_manage/service/MaterialService.java
  9. 16
      src/main/java/com/dreamchaser/depository_manage/service/impl/MaterialServiceImpl.java
  10. 6
      src/main/resources/application-test.yml
  11. 10
      src/main/resources/templates/pages/company/company-out.html
  12. 2
      src/main/resources/templates/pages/company/company_edit.html
  13. 2
      src/main/resources/templates/pages/post/post-view.html
  14. 4
      src/test/java/com/dreamchaser/depository_manage/TestForMaterialTree.java
  15. 140
      src/test/java/com/dreamchaser/depository_manage/TestForgetMapData.java
  16. 2
      src/test/java/com/dreamchaser/depository_manage/TestForgetShowData.java
  17. 213
      src/test/java/com/dreamchaser/depository_manage/TestForgetSourceList.java

2
src/main/java/com/dreamchaser/depository_manage/controller/CompanyController.java

@ -50,12 +50,14 @@ public class CompanyController {
Object page = map.get("page"); Object page = map.get("page");
Object pagesize = map.get("pagesize"); Object pagesize = map.get("pagesize");
String superior = (String) map.get("superior"); String superior = (String) map.get("superior");
Integer level = ObjectFormatUtil.toInteger(map.get("level"));
if("".equals(superior)){ if("".equals(superior)){
superior = "313"; superior = "313";
} }
map.put("page",ObjectFormatUtil.toInteger(page)); map.put("page",ObjectFormatUtil.toInteger(page));
map.put("pagesize",ObjectFormatUtil.toInteger(pagesize)); map.put("pagesize",ObjectFormatUtil.toInteger(pagesize));
map.put("superior",superior); map.put("superior",superior);
map.put("level",level);
map.put("state",1); map.put("state",1);
String jsonString = JSONObject.toJSONString(map); String jsonString = JSONObject.toJSONString(map);
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);

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

@ -214,11 +214,7 @@ public class MaterialController {
} }
// 每天凌晨0点执行一次
@Scheduled(cron = "0 0 0 * * ?")
private void getTransData() throws Exception {
materialService.InitTreeMenus_Test();
}
/** /**

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

@ -328,7 +328,7 @@ public class PageController {
mv.addObject("depositoryCount", depositoryService.findAllCountByNoDelete()); mv.addObject("depositoryCount", depositoryService.findAllCountByNoDelete());
mv.addObject("allPrice", materialService.findAllPriceNoDelete()); mv.addObject("allPrice", materialService.findAllPriceNoDelete());
mv.addObject("allMaterial", materialService.findMaterialAll().size()); mv.addObject("allMaterial", materialService.findMaterialCount(new HashMap<>()));
/** /**
* 获取当天日期 * 获取当天日期
*/ */
@ -1467,6 +1467,7 @@ public class PageController {
String url = PortConfig.external_url + "/org/govlist"; String url = PortConfig.external_url + "/org/govlist";
Map<String, Object> map = new HashMap<>(); Map<String, Object> map = new HashMap<>();
map.put("superior", "313"); map.put("superior", "313");
map.put("level", 3);
String jsonString = JSONObject.toJSONString(map); String jsonString = JSONObject.toJSONString(map);
JSONObject paramObject = JSONObject.parseObject(jsonString); JSONObject paramObject = JSONObject.parseObject(jsonString);
String post = null; String post = null;
@ -1498,6 +1499,7 @@ public class PageController {
mv.setViewName("pages/company/company-out"); mv.setViewName("pages/company/company-out");
List<AdministrationP> administrationPList = findAllCompany(userToken); List<AdministrationP> administrationPList = findAllCompany(userToken);
mv.addObject("administrationPList", administrationPList); mv.addObject("administrationPList", administrationPList);
mv.addObject("level",3);
mv.addObject("parentId", "313"); mv.addObject("parentId", "313");
return mv; return mv;
} }
@ -1591,11 +1593,12 @@ public class PageController {
} }
@GetMapping("/findCompanyByParentId") @GetMapping("/findCompanyByParentId")
public ModelAndView findCompanyByParentId(Integer parentId, HttpServletRequest request) { public ModelAndView findCompanyByParentId(Integer parentId,Integer level, HttpServletRequest request) {
UserByPort userToken = (UserByPort) request.getAttribute("userToken"); UserByPort userToken = (UserByPort) request.getAttribute("userToken");
ModelAndView mv = new ModelAndView(); ModelAndView mv = new ModelAndView();
if (parentId != null) { if (parentId != null) {
mv.addObject("parentId", parentId); mv.addObject("parentId", parentId);
mv.addObject("level", level+1);
List<AdministrationP> administrationPList = findCompanyBySuperior(parentId.toString(), userToken); List<AdministrationP> administrationPList = findCompanyBySuperior(parentId.toString(), userToken);
if (administrationPList.size() > 0) { if (administrationPList.size() > 0) {
mv.addObject("administrationPList", administrationPList); mv.addObject("administrationPList", administrationPList);

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

@ -78,6 +78,12 @@ public interface MaterialMapper {
List<Material> findMaterialByCondition(Map<String,Object>map); List<Material> findMaterialByCondition(Map<String,Object>map);
/**
* 根据条件查询物料总数
* @param map 查询条件
* @return 当前条件下的总数
*/
Integer findMaterialCount(Map<String,Object> map);
/** /**
* 根据条件查询符合条件的库存总数 * 根据条件查询符合条件的库存总数

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

@ -291,6 +291,52 @@
LIMIT #{begin},#{size} LIMIT #{begin},#{size}
</if> </if>
</select> </select>
<select id="findMaterialCount" parameterType="map" resultType="int">
select count(*)
from material m
where 1 = 1
<if test="mid != null">
and m.id = #{mid}
</if>
<if test="mname != null and mname != ''">
AND m.mname LIKE CONCAT('%', #{mname}, '%')
</if>
<if test="quantity != null">
AND m.quantity = #{quantity}
</if>
<if test="price != null">
AND m.price = #{price}
</if>
<if test="materialTypeId != null">
AND m.type_id = #{materialTypeId}
</if>
<if test="state != null and state != ''">
And m.state = #{state}
</if>
<if test="code != null and code != '' ">
and m.code = #{code}
</if>
<if test="shelfLife != null">
and #{shelfLife} >= m.shelfLife
</if>
<if test="producedDate != null">
and m.producedDate >= #{producedDate}
</if>
<if test="productionPlace != null and productionPlace !=''">
and m.productionPlace = #{productionPlace}
</if>
<if test="brand != '' and brand != null">
and m.brand LIKE CONCAT('%', #{brand}, '%')
</if>
<if test="remark != '' and remark != null">
and m.remark LIKE CONCAT('%', #{remark}, '%')
</if>
and m.depository_id is null
</select>
<!--根据条件查询库存数量--> <!--根据条件查询库存数量-->
<select id="findInventoryCount" parameterType="map" resultType="int"> <select id="findInventoryCount" parameterType="map" resultType="int">
SELECT SELECT
@ -448,6 +494,8 @@
</if> </if>
</select> </select>
<!-- 根据仓库查询物料--> <!-- 根据仓库查询物料-->
<select id="findMaterialByDepository" resultMap="materialMap" parameterType="map"> <select id="findMaterialByDepository" resultMap="materialMap" parameterType="map">
SELECT SELECT

26
src/main/java/com/dreamchaser/depository_manage/scheduled/SaticScheduleTask.java

@ -0,0 +1,26 @@
package com.dreamchaser.depository_manage.scheduled;
import com.dreamchaser.depository_manage.service.MaterialService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableScheduling;
import org.springframework.scheduling.annotation.Scheduled;
/**
* 用于执行定时任务
*/
@Configuration
@EnableScheduling
public class SaticScheduleTask {
@Autowired
MaterialService materialService;
// 每天凌晨0点执行一次
@Scheduled(cron = "0 0 0 * * ?")
private void getTransData() throws Exception {
materialService.InitTreeMenus_Test();
}
}

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

@ -234,6 +234,11 @@ public interface DepositoryRecordService {
*/ */
Integer findMaterialCountByMonth1(Map<String,Object> map); Integer findMaterialCountByMonth1(Map<String,Object> map);
/**
* 根据条件获取月份中物料的总额
* @param map 条件
* @return
*/
Integer findMaterialCountByMonth2(Map<String,Object> map); Integer findMaterialCountByMonth2(Map<String,Object> map);
/** /**

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

@ -58,17 +58,26 @@ public interface MaterialService {
/** /**
* 根据条件查询符合条件的库存总数 * 根据条件查询符合条件的库存总数
* @param map * @param map 查询条件
* @return * @return 当前条件下的总数
*/ */
Integer findInventoryCount(Map<String,Object> map); Integer findInventoryCount(Map<String,Object> map);
/** /**
* 根据编码获取对应物料 * 根据编码获取对应物料
* @return * @param code 物料编码
* @return 对应物料
*/ */
Material findMaterialByCode(String code); Material findMaterialByCode(String code);
/**
* 根据条件查询物料总数
* @param map 查询条件
* @return 当前条件下的总数
*/
Integer findMaterialCount(Map<String,Object> map);
/** /**
* 查询所有的库存信息 * 查询所有的库存信息
* @return 所有的库存信息 * @return 所有的库存信息

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

@ -278,6 +278,16 @@ public class MaterialServiceImpl implements MaterialService {
return material; return material;
} }
/**
* 根据条件查询物料总数
* @param map 查询条件
* @return 当前条件下的总数
*/
@Override
public Integer findMaterialCount(Map<String, Object> map) {
return materialMapper.findMaterialCount(map);
}
/** /**
* 查询所有的库存信息 * 查询所有的库存信息
* *
@ -950,6 +960,7 @@ public class MaterialServiceImpl implements MaterialService {
Integer mtLevel = getMtLevel(mt, 1); Integer mtLevel = getMtLevel(mt, 1);
List<MaterialType> materialTypeByParent = materialTypeMapper.findMaterialTypeByParent(mtId); List<MaterialType> materialTypeByParent = materialTypeMapper.findMaterialTypeByParent(mtId);
if(materialTypeByParent.size() > 0) {
// 获取当前redis中的树 // 获取当前redis中的树
List<String> objectList = redisTemplate.opsForList().range("wms_materialTree_result", 0, -1); List<String> objectList = redisTemplate.opsForList().range("wms_materialTree_result", 0, -1);
@ -965,12 +976,13 @@ public class MaterialServiceImpl implements MaterialService {
if (Long.compare(id, parentMt.getOldId()) == 0) { if (Long.compare(id, parentMt.getOldId()) == 0) {
// 如果是打开的顶级 // 如果是打开的顶级
JSONArray children = closeTree(jsonObject.getJSONArray("children"), mtLevel - 1, mt); JSONArray children = closeTree(jsonObject.getJSONArray("children"), mtLevel - 1, mt);
jsonObject.put("children",children); jsonObject.put("children", children);
redisTemplate.opsForList().set("wms_materialTree_result",i,JSONObject.toJSONString(jsonObject)); redisTemplate.opsForList().set("wms_materialTree_result", i, JSONObject.toJSONString(jsonObject));
break; break;
} }
} }
} }
}
/** /**
* 用于真实关闭打开的树 * 用于真实关闭打开的树

6
src/main/resources/application-test.yml

@ -79,9 +79,9 @@ mybatis:
log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl
log-prefix: mapper. log-prefix: mapper.
mybatis-plus: #mybatis-plus:
configuration: # configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
file: file:
uploadPath: D:/upLoad uploadPath: D:/upLoad

10
src/main/resources/templates/pages/company/company-out.html

@ -17,6 +17,7 @@
<div style="margin: 10px 10px 10px 10px"> <div style="margin: 10px 10px 10px 10px">
<form class="layui-form layui-form-pane" action=""> <form class="layui-form layui-form-pane" action="">
<input id="parentId" style="display: none" th:value="${parentId}"> <input id="parentId" style="display: none" th:value="${parentId}">
<input id="level" style="display: none" th:value="${level}">
<div class="layui-form-item"> <div class="layui-form-item">
<div class="layui-inline"> <div class="layui-inline">
<label class="layui-form-label">公司名称</label> <label class="layui-form-label">公司名称</label>
@ -67,7 +68,8 @@
var $ = layui.jquery, var $ = layui.jquery,
form = layui.form, form = layui.form,
table = layui.table; table = layui.table;
var parentId = document.getElementById("parentId").value; var parentId = $("#parentId").val();
var level = $("#level").val();
table.render({ table.render({
elem: "#currentTableId", elem: "#currentTableId",
url: '/company/allCompanyByParent', url: '/company/allCompanyByParent',
@ -85,7 +87,8 @@
limitName: 'pagesize', //每页数据量的参数名,默认:limit limitName: 'pagesize', //每页数据量的参数名,默认:limit
}, },
where: { where: {
superior: parentId superior: parentId,
level:level
}, },
response: { response: {
statusName: 'status' //规定数据状态的字段名称,默认:code statusName: 'status' //规定数据状态的字段名称,默认:code
@ -152,6 +155,7 @@
table.on('tool(currentTableFilter)', function (obj) { table.on('tool(currentTableFilter)', function (obj) {
let data = obj.data; let data = obj.data;
console.log(data)
if (obj.event === 'detail') { if (obj.event === 'detail') {
var index = layer.open({ var index = layer.open({
title: '公司详情', title: '公司详情',
@ -174,7 +178,7 @@
maxmin: true, maxmin: true,
shadeClose: true, shadeClose: true,
area: ['100%', '100%'], area: ['100%', '100%'],
content: '/findCompanyByParentId?parentId=' + data.id content: '/findCompanyByParentId?parentId=' + data.id+'&level='+data.level
}); });
$(window).on("resize", function () { $(window).on("resize", function () {
layer.full(index); layer.full(index);

2
src/main/resources/templates/pages/company/company_edit.html

@ -13,7 +13,7 @@
<body> <body>
<form class="layui-form" action="" > <form class="layui-form" action="" >
<div class="layui-form-item"> <div class="layui-form-item" style="display: none">
<label class="layui-form-label">Id</label> <label class="layui-form-label">Id</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" th:value="${record.getId()}" name="id" required lay-verify="required" autocomplete="off" class="layui-input" readonly="readonly"> <input type="text" th:value="${record.getId()}" name="id" required lay-verify="required" autocomplete="off" class="layui-input" readonly="readonly">

2
src/main/resources/templates/pages/post/post-view.html

@ -13,7 +13,7 @@
<body> <body>
<form class="layui-form" action="" > <form class="layui-form" action="" >
<div class="layui-form-item"> <div class="layui-form-item" style="display: none">
<label class="layui-form-label">Id</label> <label class="layui-form-label">Id</label>
<div class="layui-input-block"> <div class="layui-input-block">
<input type="text" th:value="${record.getId()}" name="id" required lay-verify="required" autocomplete="off" class="layui-input" readonly="readonly"> <input type="text" th:value="${record.getId()}" name="id" required lay-verify="required" autocomplete="off" class="layui-input" readonly="readonly">

4
src/test/java/com/dreamchaser/depository_manage/TestForMaterialTree.java

@ -98,8 +98,8 @@ public class TestForMaterialTree {
RedisTemplate<String, String> redisTemplate; RedisTemplate<String, String> redisTemplate;
@org.junit.Test @org.junit.Test
public void test1() throws AesException, IOException, ParserConfigurationException, SAXException { public void test1(){
List<Object> objectList = InitTree_Test();
} }

140
src/test/java/com/dreamchaser/depository_manage/TestForgetMapData.java

@ -0,0 +1,140 @@
package com.dreamchaser.depository_manage;
import com.dreamchaser.depository_manage.controller.DepositoryController;
import com.dreamchaser.depository_manage.entity.MaterialType;
import com.dreamchaser.depository_manage.service.DepositoryRecordService;
import com.dreamchaser.depository_manage.service.DepositoryService;
import com.dreamchaser.depository_manage.service.MaterialTypeService;
import com.dreamchaser.depository_manage.utils.DateUtil;
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.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.*;
@SpringBootTest
@RunWith(SpringRunner.class)
public class TestForgetMapData {
@Autowired
MaterialTypeService materialTypeService;
@Autowired
DepositoryRecordService depositoryRecordService;
@Test
public void Test(){
Map<String, Object> mapData = getMapData("1");
System.out.println(mapData);
}
// 中国地图数据
public Map<String, Object> getMapData(String type){
List<Object> mapDataList = new ArrayList<>();
Map<String, Object> previousMonth1 = getPreviousMonth();
List<Object> sourceList1 = (List<Object>) previousMonth1.get("sourceList");
ArrayList<Object> title = new ArrayList<>();
title.add("product");
for (int i = sourceList1.size() - 1; i >= 0; i--) {
title.add(((Map<String, Object>) sourceList1.get(i)).get("month"));
}
mapDataList.add(title);
// 获取所有顶级类别
List<MaterialType> materialTypeAll = materialTypeService.findMaterialTypeNoParent();
// 定义对应数量的线程池
ExecutorService exs = Executors.newFixedThreadPool(materialTypeAll.size());
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
for (int i = 0; i < materialTypeAll.size(); i++) {
MaterialType mt = materialTypeAll.get(i);
Future<Object> future = completionService.submit(new findMapData(previousMonth1,type,mt));
futureList.add(future);
}
for (int i = 0; i < materialTypeAll.size(); i++) {
Object result = null;
try {
result = completionService.take().get();
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
mapDataList.add(result);
}
Map<String,Object> mapData =new HashMap<>();
mapData.put("mapDataList", mapDataList);
return mapData;
}
class findMapData implements Callable<Object>{
String type ;
MaterialType mt;
Map<String, Object> previousMonth1;
findMapData( Map<String, Object> previousMonth1,String type ,MaterialType mt){
this.previousMonth1 = previousMonth1;
this.type = type;
this.mt = mt;
}
@Override
public Object call() throws Exception {
List<Object> productData = new ArrayList<>();
List<Object> months1 = (List<Object>) previousMonth1.get("months");
productData.add(mt.getTname());
for (int j = months1.size() - 1; j > 0; j--) {
Map<String, Object> parm = new HashMap<>();
parm.put("type", Integer.parseInt(type));
if (Integer.parseInt(type) == 1) {
parm.put("state", "已入库");
} else if (Integer.parseInt(type) == 2) {
parm.put("state", "已出库");
}
parm.put("start", months1.get(j));
parm.put("end", months1.get(j - 1));
parm.put("oldId", mt.getOldId());
//根据条件获取月份中物料的总额
// 测试
Integer materialCountByMonth1 = depositoryRecordService.findMaterialCountByMonth2(parm);
productData.add(materialCountByMonth1);
}
return productData;
}
}
/**
* 获取本月之前的月份
*
* @return
*/
public static Map<String, Object> getPreviousMonth() {
Calendar instance = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Map<String, Object> source = new HashMap<>();
List<Object> sourceList = new ArrayList<>();
int month = instance.get(Calendar.MONTH) + 1;
ArrayList<Object> months = new ArrayList<>();
while (month > 0) {
instance.set(Calendar.MONTH, month);
instance.set(Calendar.DAY_OF_MONTH, 1);
source.put("month", month + "月");
months.add(DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())));
month--;
sourceList.add(((HashMap<String, Object>) source).clone());
}
instance.set(Calendar.MONTH, month);
instance.set(Calendar.DAY_OF_MONTH, 1);
months.add(DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())));
Map<String, Object> map = new HashMap<>();
map.put("months", months);
map.put("sourceList", sourceList);
return map;
}
}

2
src/test/java/com/dreamchaser/depository_manage/TestForgetShowData.java

@ -56,7 +56,7 @@ public class TestForgetShowData {
UserByPort userByPort = PageController.FindUserById(78, null); UserByPort userByPort = PageController.FindUserById(78, null);
Map<String,Integer> yesterdayData = new HashMap<>(); Map<String,Integer> yesterdayData = new HashMap<>();
List<String> depositoryName = new ArrayList<>(); List<String> depositoryName = new ArrayList<>();
Map<String, Object> showData = getShowData("2", userByPort, yesterdayData, depositoryName); Map<String, Object> showData = getShowData("1", userByPort, yesterdayData, depositoryName);
System.out.println(JSONObject.toJSONString(showData)); System.out.println(JSONObject.toJSONString(showData));
} }

213
src/test/java/com/dreamchaser/depository_manage/TestForgetSourceList.java

@ -0,0 +1,213 @@
package com.dreamchaser.depository_manage;
import com.dreamchaser.depository_manage.controller.DepositoryController;
import com.dreamchaser.depository_manage.entity.MaterialType;
import com.dreamchaser.depository_manage.mapper.MaterialTypeMapper;
import com.dreamchaser.depository_manage.service.DepositoryRecordService;
import com.dreamchaser.depository_manage.service.DepositoryService;
import com.dreamchaser.depository_manage.service.MaterialTypeService;
import com.dreamchaser.depository_manage.utils.DateUtil;
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 javax.swing.*;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.concurrent.*;
@SpringBootTest
@RunWith(SpringRunner.class)
public class TestForgetSourceList {
@Autowired
DepositoryRecordService depositoryRecordService;
@Autowired
DepositoryService depositoryService;
@Autowired
MaterialTypeService materialTypeService;
@Autowired
MaterialTypeMapper materialTypeMapper;
@Test
public void Test(){
// List<Object> sourceList = getSourceList("1");
// System.out.println(sourceList);
MaterialType materialTypeByOldId = materialTypeMapper.findMaterialTypeByOldId(Long.valueOf("25"));
System.out.println(findChildForMaterialTypeByParent(materialTypeByOldId));
}
// 根据id获取子类
public List<Long> findChildForMaterialTypeByParent(MaterialType mt) {
List<Long> result = new ArrayList<>();
result.add(mt.getOldId());
List<Long> parentId = new ArrayList<>();
parentId.add(mt.getOldId());
List<MaterialType> materialTypeAll = materialTypeMapper.findMaterialTypeAll();
for (int i = 0; i < materialTypeAll.size(); i++) {
MaterialType materialType = materialTypeAll.get(i);
if (isTrueForParent(parentId, materialType.getParentId())) {
parentId.add(materialType.getOldId());
result.add(materialType.getOldId());
}
}
return result;
}
public Boolean isTrueForParent(List<Long> parentList, Long id) {
for (Long aLong : parentList) {
if (Long.compare(aLong, id) == 0) {
return true;
}
}
return false;
}
//获取本月及之前月份各种类别入/出库总量
public List<Object> getSourceList(String type){
List<MaterialType> materialTypeAll = materialTypeService.findMaterialTypeNoParent();
Map<String, Object> previousMonth = getPreviousMonth();
List<Object> months = (List<Object>) previousMonth.get("months");
List<Object> sourceList = (List<Object>) previousMonth.get("sourceList");
ExecutorService exs = Executors.newFixedThreadPool(months.size());
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
for (int num = 0; num < months.size() - 1; num++) {
Map<String,Object> map = (Map<String, Object>) sourceList.get(num);
Future<Object> future = completionService.submit(new getSourceListTask(map,type,months.get(num + 1).toString(),months.get(num).toString(),materialTypeAll));
futureList.add(future);
}
for (int i = 0; i < months.size() - 1; i++) {
Object result = null;
try {
result = completionService.take();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
List<String> barSource = new ArrayList<>();
barSource.add("month");
for (int i = 0; i < materialTypeAll.size(); i++) {
barSource.add(materialTypeAll.get(i).getTname());
}
sourceList.add(barSource);
return sourceList;
}
// 具体执行getSourceList逻辑
class getSourceListTask implements Callable<Object> {
String type;
String start;
String end;
Map<String,Object> map;
List<MaterialType> materialTypeAll;
getSourceListTask(Map<String,Object> map, String type, String start, String end,List<MaterialType> materialTypeAll){
this.map = map;
this.type = type;
this.start = start;
this.end = end;
this.materialTypeAll = materialTypeAll;
}
@Override
public Object call() throws Exception {
ExecutorService exs = Executors.newFixedThreadPool(materialTypeAll.size());
// 结果集
List<Future<Object>> futureList = new ArrayList<Future<Object>>();
// 1.定义CompletionService
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs);
for (int j = 0; j < materialTypeAll.size(); j++) {
Map<String, Object> parm = new HashMap<>();
parm.put("type", Integer.parseInt(type));
if (Integer.parseInt(type) == 1) {
parm.put("state", "已入库");
} else if (Integer.parseInt(type) == 2) {
parm.put("state", "已出库");
}
parm.put("start",start);
parm.put("end", end);
parm.put("oldId", materialTypeAll.get(j).getOldId());
//根据条件获取月份中物料的总额
// 测试
Future<Object> future = completionService.submit(new findMaterialCountTaskForSourceList(parm));
futureList.add(future);
}
for (int i = 0; i < materialTypeAll.size(); i++) {
Object result = null;
try {
result = completionService.take().get();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (ExecutionException e) {
e.printStackTrace();
}
map.putAll((Map<? extends String, ?>) result);
}
return map;
}
}
// 根据条件获取月份中物料的总额用于sourcelist
class findMaterialCountTaskForSourceList implements Callable<Object> {
Map<String,Object> map;
findMaterialCountTaskForSourceList(Map<String,Object> map){
this.map = map;
}
@Override
public Object call() throws Exception {
Map<String,Object> result = new HashMap<>();
Integer materialCountByMonth1 = depositoryRecordService.findMaterialCountByMonth2(map);
Long oldId = Long.valueOf(map.get("oldId").toString());
MaterialType materialTypeByOldId = materialTypeService.findMaterialTypeByOldId(oldId);
result.put(materialTypeByOldId.getTname(),materialCountByMonth1);
return result;
}
}
/**
* 获取本月之前的月份
*
* @return
*/
public static Map<String, Object> getPreviousMonth() {
Calendar instance = Calendar.getInstance();
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
Map<String, Object> source = new HashMap<>();
List<Object> sourceList = new ArrayList<>();
int month = instance.get(Calendar.MONTH) + 1;
ArrayList<Object> months = new ArrayList<>();
while (month > 0) {
instance.set(Calendar.MONTH, month);
instance.set(Calendar.DAY_OF_MONTH, 1);
source.put("month", month + "月");
months.add(DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())));
month--;
sourceList.add(((HashMap<String, Object>) source).clone());
}
instance.set(Calendar.MONTH, month);
instance.set(Calendar.DAY_OF_MONTH, 1);
months.add(DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())));
Map<String, Object> map = new HashMap<>();
map.put("months", months);
map.put("sourceList", sourceList);
return map;
}
}
Loading…
Cancel
Save