30 changed files with 1086 additions and 256 deletions
@ -0,0 +1,12 @@ |
|||
package com.dreamchaser.depository_manage.pojo; |
|||
|
|||
import lombok.Data; |
|||
|
|||
/** |
|||
* 用于仓库与库存的对应 |
|||
*/ |
|||
@Data |
|||
public class InventoryByDname { |
|||
Integer inventory; |
|||
String dname; |
|||
} |
|||
@ -0,0 +1,234 @@ |
|||
package com.dreamchaser.depository_manage; |
|||
|
|||
import com.alibaba.fastjson.JSON; |
|||
import com.alibaba.fastjson.JSONObject; |
|||
import com.dreamchaser.depository_manage.controller.PageController; |
|||
import com.dreamchaser.depository_manage.entity.Depository; |
|||
import com.dreamchaser.depository_manage.entity.MaterialType; |
|||
import com.dreamchaser.depository_manage.entity.UserByPort; |
|||
import com.dreamchaser.depository_manage.mapper.DepositoryMapper; |
|||
import com.dreamchaser.depository_manage.mapper.DepositoryRecordMapper; |
|||
import com.dreamchaser.depository_manage.mapper.MaterialTypeMapper; |
|||
import com.dreamchaser.depository_manage.mapper.RoleMapper; |
|||
import com.dreamchaser.depository_manage.pojo.InventoryByDname; |
|||
import com.dreamchaser.depository_manage.pojo.RoleAndDepository; |
|||
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 Test2 { |
|||
|
|||
|
|||
@Autowired |
|||
MaterialTypeService materialTypeService; |
|||
|
|||
@Autowired |
|||
DepositoryRecordService depositoryRecordService; |
|||
|
|||
@Autowired |
|||
DepositoryRecordMapper depositoryRecordMapper; |
|||
|
|||
@Autowired |
|||
DepositoryMapper depositoryMapper; |
|||
|
|||
@Autowired |
|||
MaterialTypeMapper materialTypeMapper; |
|||
|
|||
@Autowired |
|||
DepositoryService depositoryService; |
|||
|
|||
@Autowired |
|||
RoleMapper roleMapper; |
|||
@Test |
|||
public void test(){ |
|||
UserByPort userByPort = PageController.FindUserById(6235, null); |
|||
List<Depository> depositoryAll = depositoryService.findDepositoryByAdminorgAndUser(userByPort); |
|||
// 获取该用户管理的仓库
|
|||
Map<String, Object> previousMonth = getPreviousMonth(); |
|||
List<Object> sourceList = (List<Object>) previousMonth.get("sourceList"); |
|||
Calendar instance = Calendar.getInstance(); |
|||
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); |
|||
instance.add(Calendar.MONTH, 1); |
|||
instance.set(Calendar.DATE, 1); |
|||
List<Integer> result = new ArrayList<>(); |
|||
List<InventoryByDname> toDayInventoryByDNameTest = depositoryMapper.getToDayInventoryByDNameTest(); |
|||
for (int i = 0; i < depositoryAll.size(); i++) { |
|||
Depository depository = depositoryAll.get(i); |
|||
Integer inventoryByDname = getInventoryByDname(depository.getDname(), toDayInventoryByDNameTest); |
|||
result.add(inventoryByDname); |
|||
((Map<String, Object>) sourceList.get(0)).put(depository.getDname(), result.get(i)); |
|||
} |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 获取当前仓库下的库存 |
|||
* @param dname |
|||
* @param list |
|||
* @return |
|||
*/ |
|||
public Integer getInventoryByDname(String dname,List<InventoryByDname> list){ |
|||
for (InventoryByDname inventoryByDname : list) { |
|||
if (dname.equals(inventoryByDname.getDname())) { |
|||
return inventoryByDname.getInventory(); |
|||
} |
|||
} |
|||
return 0; |
|||
} |
|||
|
|||
public List<Object> getBeforeInventoryByMonth(DepositoryService depositoryService, DepositoryRecordService depositoryRecordService, UserByPort userByPort) { |
|||
List<Depository> depositoryAll = depositoryService.findDepositoryByAdminorgAndUser(userByPort); |
|||
// 获取该用户管理的仓库
|
|||
Map<String, Object> previousMonth = getPreviousMonth(); |
|||
List<Object> months = (List<Object>) previousMonth.get("months"); |
|||
List<Object> sourceList = (List<Object>) previousMonth.get("sourceList"); |
|||
Calendar instance = Calendar.getInstance(); |
|||
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); |
|||
instance.add(Calendar.MONTH, 1); |
|||
instance.set(Calendar.DATE, 1); |
|||
List<Integer> result = new ArrayList<>(); |
|||
List<InventoryByDname> toDayInventoryByDNameTest = depositoryService.getToDayInventoryByDNameTest(); |
|||
for (int i = 0; i < depositoryAll.size(); i++) { |
|||
Depository depository = depositoryAll.get(i); |
|||
Integer inventoryByDname = getInventoryByDname(depository.getDname(), toDayInventoryByDNameTest); |
|||
result.add(inventoryByDname); |
|||
((Map<String, Object>) sourceList.get(0)).put(depository.getDname(), result.get(i)); |
|||
} |
|||
for (int num = 0; num < months.size() - 1; num++) { |
|||
int k = 0; |
|||
for (int j = 0; j < depositoryAll.size(); j++) { |
|||
// 获取该仓库本月库存
|
|||
Map<String, Object> parmIn = new HashMap<>(); |
|||
Map<String, Object> parmOut = new HashMap<>(); |
|||
// 获取每月入库总额
|
|||
parmIn.put("type", 1); |
|||
parmIn.put("state", "已入库"); |
|||
parmIn.put("depository_id", depositoryAll.get(j).getId()); |
|||
parmIn.put("start", months.get(num + 1)); |
|||
parmIn.put("end", months.get(num)); |
|||
// 获取每月出库总额
|
|||
parmOut.put("type", 2); |
|||
parmOut.put("state", "已出库"); |
|||
parmOut.put("depository_id", depositoryAll.get(j).getId()); |
|||
parmOut.put("start", months.get(num + 1)); |
|||
parmOut.put("end", months.get(num)); |
|||
// 获取月份中入库物料的总额
|
|||
Integer wareHouseInCountByMonth1 = depositoryRecordService.findMaterialCountByMonth2(parmIn); |
|||
// 获取月份中出库物料的总额
|
|||
Integer wareHouseOutCountByMonth1 = depositoryRecordService.findMaterialCountByMonth2(parmOut); |
|||
// 获取当前月库存容量
|
|||
Integer wareHouseCount1 = result.get(k++) - wareHouseInCountByMonth1 + wareHouseOutCountByMonth1; |
|||
result.add(wareHouseCount1); |
|||
Map<String, Object> map = (Map<String, Object>) sourceList.get(num); |
|||
map.put(depositoryAll.get(j).getDname(), wareHouseCount1); |
|||
} |
|||
for (int i = 0; i < depositoryAll.size(); i++) { |
|||
result.remove(0); |
|||
} |
|||
} |
|||
|
|||
for (int i = 0; i < depositoryAll.size(); i++) { |
|||
((Map<String, Object>) sourceList.get(0)).put(depositoryAll.get(i).getDname(), depositoryService.getToDayInventoryByDName(depositoryAll.get(i).getDname())); |
|||
} |
|||
List<String> barSource = new ArrayList<>(); |
|||
barSource.add("month"); |
|||
for (int i = 0; i < depositoryAll.size(); i++) { |
|||
barSource.add(depositoryAll.get(i).getDname()); |
|||
} |
|||
sourceList.add(barSource); |
|||
return sourceList; |
|||
} |
|||
|
|||
|
|||
// 用于获取之前各月库存的线程任务
|
|||
class getBeforeInventoryByMonthTask implements Callable<Object>{ |
|||
|
|||
List<Depository> depositoryAll; |
|||
List<Object> months; |
|||
Integer num; |
|||
Map<String,Object> map; |
|||
getBeforeInventoryByMonthTask( List<Depository> depositoryAll, List<Object> months,Integer num,Map<String,Object> map){ |
|||
this.depositoryAll = depositoryAll; |
|||
this.months = months; |
|||
this.num = num; |
|||
this.map = map; |
|||
} |
|||
|
|||
|
|||
@Override |
|||
public Object call() throws Exception { |
|||
for (int j = 0; j < depositoryAll.size(); j++) { |
|||
// 获取该仓库本月库存
|
|||
Map<String, Object> parmIn = new HashMap<>(); |
|||
Map<String, Object> parmOut = new HashMap<>(); |
|||
// 获取每月入库总额
|
|||
parmIn.put("type", 1); |
|||
parmIn.put("state", "已入库"); |
|||
parmIn.put("depository_id", depositoryAll.get(j).getId()); |
|||
parmIn.put("start", months.get(num + 1)); |
|||
parmIn.put("end", months.get(num)); |
|||
// 获取每月出库总额
|
|||
parmOut.put("type", 2); |
|||
parmOut.put("state", "已出库"); |
|||
parmOut.put("depository_id", depositoryAll.get(j).getId()); |
|||
parmOut.put("start", months.get(num + 1)); |
|||
parmOut.put("end", months.get(num)); |
|||
// 获取月份中入库物料的总额
|
|||
// 测试
|
|||
Integer wareHouseInCountByMonth1 = depositoryRecordService.findMaterialCountByMonth2(parmIn); |
|||
// 获取月份中出库物料的总额
|
|||
// 测试
|
|||
Integer wareHouseOutCountByMonth1 = depositoryRecordService.findMaterialCountByMonth2(parmOut); |
|||
// 获取当前月库存容量
|
|||
// 测试
|
|||
// Double wareHouseCount1 = result.get(k++) - wareHouseInCountByMonth1 + wareHouseOutCountByMonth1;
|
|||
// result.add(wareHouseCount1);
|
|||
// map.put(depositoryAll.get(j).getDname(), wareHouseCount1);
|
|||
} |
|||
return null; |
|||
} |
|||
} |
|||
|
|||
|
|||
/** |
|||
* 获取本月之前的月份 |
|||
* |
|||
* @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; |
|||
} |
|||
} |
|||
|
|||
@ -0,0 +1,190 @@ |
|||
package com.dreamchaser.depository_manage; |
|||
|
|||
import com.alibaba.fastjson.JSONObject; |
|||
import com.dreamchaser.depository_manage.controller.DepositoryController; |
|||
import com.dreamchaser.depository_manage.controller.PageController; |
|||
import com.dreamchaser.depository_manage.entity.MaterialType; |
|||
import com.dreamchaser.depository_manage.entity.UserByPort; |
|||
import com.dreamchaser.depository_manage.mapper.DepositoryMapper; |
|||
import com.dreamchaser.depository_manage.mapper.DepositoryRecordMapper; |
|||
import com.dreamchaser.depository_manage.mapper.MaterialTypeMapper; |
|||
import com.dreamchaser.depository_manage.mapper.RoleMapper; |
|||
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 lombok.Data; |
|||
import org.apache.xmlbeans.impl.jam.mutable.MPackage; |
|||
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 Test3 { |
|||
|
|||
@Autowired |
|||
MaterialTypeService materialTypeService; |
|||
|
|||
@Autowired |
|||
DepositoryRecordService depositoryRecordService; |
|||
|
|||
@Autowired |
|||
DepositoryRecordMapper depositoryRecordMapper; |
|||
|
|||
@Autowired |
|||
DepositoryMapper depositoryMapper; |
|||
|
|||
@Autowired |
|||
MaterialTypeMapper materialTypeMapper; |
|||
|
|||
@Autowired |
|||
DepositoryService depositoryService; |
|||
|
|||
@Autowired |
|||
RoleMapper roleMapper; |
|||
|
|||
|
|||
@Test |
|||
public void Test() { |
|||
UserByPort userByPort = PageController.FindUserById(78, null); |
|||
Map<String,Double> yesterdayData = new HashMap<>(); |
|||
List<String> depositoryName = new ArrayList<>(); |
|||
Map<String, Object> showData = getShowData("1", userByPort, yesterdayData, depositoryName); |
|||
System.out.println(JSONObject.toJSONString(showData)); |
|||
} |
|||
|
|||
public Map<String,Object> getShowData(String type,UserByPort userByPort,Map<String,Double> yesterdayData,List<String> depositoryName){ |
|||
// 获取各仓库名称以及id
|
|||
Map<String, Integer> depositoryAllNameAndId = depositoryService.findDepositoryAllNameAndId(userByPort); |
|||
|
|||
|
|||
Iterator it = depositoryAllNameAndId.keySet().iterator(); |
|||
|
|||
// 仓库名称列表
|
|||
//获取获取系统的当前日历对象
|
|||
Calendar instance = Calendar.getInstance(); |
|||
// 获取日期
|
|||
SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); |
|||
int now = instance.get(Calendar.DAY_OF_WEEK) - 1; |
|||
List<Long> days = new ArrayList<>(); // 周一至今的每天
|
|||
instance.add(Calendar.DATE, 1); |
|||
days.add(DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime()))); |
|||
instance.add(Calendar.DATE, -1); |
|||
days.add(DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime()))); |
|||
while (now - 1 > 0) { |
|||
now--; |
|||
instance.add(Calendar.DATE, -1); |
|||
Long format = DateUtil.DateTimeByMonthToTimeStamp(formatter.format(instance.getTime())); |
|||
days.add(format); |
|||
} |
|||
List<Double> drCountbyDrName = new ArrayList<>(); |
|||
|
|||
// 定义线程
|
|||
ExecutorService exs = Executors.newFixedThreadPool(depositoryAllNameAndId.size()); |
|||
// 结果集
|
|||
List<Future<Object>> futureList = new ArrayList<Future<Object>>(); |
|||
// 1.定义CompletionService
|
|||
CompletionService<Object> completionService = new ExecutorCompletionService<Object>(exs); |
|||
|
|||
// 每天各仓库入库数目
|
|||
Map<String, Object> show_data = new HashMap<>(); |
|||
while (it.hasNext()) { |
|||
Object next = it.next(); |
|||
getApplicationRecordByDate getApplicationRecordByDate = new getApplicationRecordByDate(type, next, days, depositoryAllNameAndId); |
|||
getApplicationRecordByDate.setShow_data(show_data); |
|||
getApplicationRecordByDate.setDepositoryName(depositoryName); |
|||
getApplicationRecordByDate.setYesterdayData(yesterdayData); |
|||
Future<Object> future = completionService.submit(getApplicationRecordByDate); |
|||
futureList.add(future); |
|||
} |
|||
|
|||
for (int i = 0; i < depositoryAllNameAndId.size(); i++) { |
|||
Object result = null; |
|||
try { |
|||
result = completionService.take().get(); |
|||
} catch (InterruptedException | ExecutionException e) { |
|||
e.printStackTrace(); |
|||
} |
|||
} |
|||
|
|||
return show_data; |
|||
} |
|||
|
|||
@Data |
|||
class getApplicationRecordByDate implements Callable<Object>{ |
|||
Object key; |
|||
List<Long> days; |
|||
Map<String, Integer> depositoryAllNameAndId; |
|||
List<String> depositoryName; |
|||
Map<String,Double> yesterdayData; |
|||
String type; |
|||
Map<String, Object> show_data; |
|||
getApplicationRecordByDate(String type,Object key,List<Long> days,Map<String, Integer> depositoryAllNameAndId ){ |
|||
this.key = key; |
|||
this.depositoryAllNameAndId = depositoryAllNameAndId; |
|||
this.days = days; |
|||
this.type = type; |
|||
} |
|||
|
|||
@Override |
|||
public Object call() throws Exception { |
|||
int i; |
|||
List<Double> drCountbyDrName = new ArrayList<>(); |
|||
for (i = days.size() - 1; i > 0; i--) { |
|||
// 遍历 Map并计算各仓库的入库数
|
|||
if (i == days.size() - 1) { |
|||
depositoryName.add(key.toString()); |
|||
} |
|||
Integer val = (Integer) depositoryAllNameAndId.get(key); |
|||
// 获取一段时间内的库存额度
|
|||
Double depositoryRecordByDate1 = depositoryRecordService.findApplicationRecordByDate(days.get(i - 1), days.get(i), Integer.parseInt(type), val); |
|||
drCountbyDrName.add(depositoryRecordByDate1); |
|||
if (i == 2) { |
|||
yesterdayData.put(key.toString(), depositoryRecordByDate1); |
|||
} |
|||
} |
|||
show_data.put(key.toString(),drCountbyDrName); |
|||
return null; |
|||
} |
|||
} |
|||
|
|||
|
|||
|
|||
|
|||
|
|||
/** |
|||
* 获取本月之前的月份 |
|||
* |
|||
* @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…
Reference in new issue