OrderTask.java 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package com.jjt.task;
  2. import com.jjt.common.constant.CacheConstants;
  3. import com.jjt.common.core.redis.RedisCache;
  4. import com.jjt.order.domain.MesStock;
  5. import com.jjt.order.domain.MesStockCalc;
  6. import com.jjt.order.service.ITwinOrderService;
  7. import com.jjt.utils.MssqlUtil;
  8. import org.springframework.stereotype.Component;
  9. import javax.annotation.Resource;
  10. import java.time.LocalDate;
  11. import java.time.LocalDateTime;
  12. import java.util.*;
  13. import java.util.concurrent.atomic.AtomicLong;
  14. import java.util.stream.Collectors;
  15. /**
  16. * 订单/库存定时任务
  17. *
  18. * @author jjt
  19. */
  20. @Component("order")
  21. public class OrderTask {
  22. @Resource
  23. private RedisCache redisCache;
  24. @Resource
  25. private ITwinOrderService orderService;
  26. /**
  27. * 获取昨日订单
  28. */
  29. public void getOrder() {
  30. LocalDate localDate = LocalDate.now().minusDays(1);
  31. orderService.getOrder(localDate);
  32. }
  33. /**
  34. * 首页库存
  35. */
  36. public void stock() {
  37. //减少7个小时,班组统计时间
  38. LocalDate localDate = LocalDateTime.now().minusHours(7).toLocalDate();
  39. List<MesStock> list = MssqlUtil.mesStock(localDate);
  40. Map<String, Double> currStock = MssqlUtil.currStock();
  41. HashMap<String, Object> initMap = new HashMap<>(16);
  42. initMap.put("d-in", 0L);
  43. initMap.put("d-out", 0L);
  44. initMap.put("m-in", 0L);
  45. initMap.put("m-out", 0L);
  46. Map<String, Object> mapping = new HashMap<>(16);
  47. mapping.put("WH01", "ycl");
  48. mapping.put("WH03", "pt");
  49. mapping.put("WH04", "bpb");
  50. mapping.put("WH08", "cp");
  51. Map<String, Object> result = new HashMap<>(16);
  52. result.put("ycl", initMap.clone());
  53. result.put("cp", initMap.clone());
  54. result.put("bpb", initMap.clone());
  55. result.put("pt", initMap.clone());
  56. for (String key : currStock.keySet()) {
  57. HashMap<String, Object> map = (HashMap<String, Object>) result.get(key);
  58. map.put("curr", currStock.get(key));
  59. }
  60. //先按仓库分组
  61. Map<String, List<MesStock>> codeMap = list.stream().collect(Collectors.groupingBy(MesStock::getCode));
  62. codeMap.forEach((code, codeList) -> {
  63. //按时间分组
  64. Map<String, Object> map = (Map<String, Object>) result.get(mapping.get(code));
  65. AtomicLong dIn = new AtomicLong((Long) map.get("d-in"));
  66. AtomicLong dOut = new AtomicLong((Long) map.get("d-out"));
  67. AtomicLong mIn = new AtomicLong((Long) map.get("m-in"));
  68. AtomicLong mOut = new AtomicLong((Long) map.get("m-out"));
  69. List<MesStockCalc> calcList = new ArrayList<>();
  70. Map<LocalDate, List<MesStock>> dateMap = codeList.stream().collect(Collectors.groupingBy(MesStock::getDate));
  71. dateMap.forEach((date, dateList) -> {
  72. List<MesStock> inList = dateList.stream().filter(MesStock::getFlag).collect(Collectors.toList());
  73. List<MesStock> outList = dateList.stream().filter(o -> !o.getFlag()).collect(Collectors.toList());
  74. //统计入库
  75. long inNum = inList.stream().mapToLong(MesStock::getTotal).sum();
  76. //统计出库
  77. long outNum = outList.stream().mapToLong(MesStock::getTotal).sum();
  78. MesStockCalc calc = new MesStockCalc();
  79. calc.setCode(code);
  80. calc.setDate(date);
  81. calc.setInNum(inNum);
  82. calc.setOutNum(outNum);
  83. calcList.add(calc);
  84. if (localDate.isEqual(date)) {
  85. dIn.addAndGet(inNum);
  86. dOut.addAndGet(outNum);
  87. map.put("in", inList);
  88. map.put("out", outList);
  89. }
  90. if (localDate.getYear() == date.getYear() && localDate.getMonthValue() == date.getMonthValue()) {
  91. mIn.addAndGet(inNum);
  92. mOut.addAndGet(outNum);
  93. }
  94. map.put("d-in", dIn.longValue());
  95. map.put("d-out", dOut.longValue());
  96. map.put("m-in", mIn.longValue());
  97. map.put("m-out", mOut.longValue());
  98. });
  99. calcList.sort(Comparator.comparing(MesStockCalc::getDate));
  100. map.put("trend", calcList);
  101. });
  102. redisCache.setCacheObject(CacheConstants.VMS_STOCK, result);
  103. }
  104. }