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