package com.jjt.task; import com.jjt.common.constant.CacheConstants; import com.jjt.common.core.redis.RedisCache; import com.jjt.order.domain.MesStock; import com.jjt.order.domain.MesStockCalc; import com.jjt.order.service.ITwinOrderService; import com.jjt.utils.MssqlUtil; import org.springframework.stereotype.Component; import javax.annotation.Resource; import java.time.LocalDate; import java.time.LocalDateTime; import java.util.*; import java.util.concurrent.atomic.AtomicLong; import java.util.stream.Collectors; /** * 订单/库存定时任务 * * @author jjt */ @Component("order") public class OrderTask { @Resource private RedisCache redisCache; @Resource private ITwinOrderService orderService; /** * 获取昨日订单 */ public void getOrder() { LocalDate localDate = LocalDate.now().minusDays(1); orderService.getOrder(localDate); } /** * 首页库存 */ public void stock() { //减少7个小时,班组统计时间 LocalDate localDate = LocalDateTime.now().minusHours(7).toLocalDate(); List list = MssqlUtil.mesStock(localDate); Map currStock = MssqlUtil.currStock(); HashMap initMap = new HashMap<>(16); initMap.put("d-in", 0L); initMap.put("d-out", 0L); initMap.put("m-in", 0L); initMap.put("m-out", 0L); Map mapping = new HashMap<>(16); mapping.put("WH01", "ycl"); mapping.put("WH03", "pt"); mapping.put("WH04", "bpb"); mapping.put("WH08", "cp"); Map result = new HashMap<>(16); result.put("ycl", initMap.clone()); result.put("cp", initMap.clone()); result.put("bpb", initMap.clone()); result.put("pt", initMap.clone()); for (String key : currStock.keySet()) { HashMap map = (HashMap) result.get(key); map.put("curr", currStock.get(key)); } //先按仓库分组 Map> codeMap = list.stream().collect(Collectors.groupingBy(MesStock::getCode)); codeMap.forEach((code, codeList) -> { //按时间分组 Map map = (Map) result.get(mapping.get(code)); AtomicLong dIn = new AtomicLong((Long) map.get("d-in")); AtomicLong dOut = new AtomicLong((Long) map.get("d-out")); AtomicLong mIn = new AtomicLong((Long) map.get("m-in")); AtomicLong mOut = new AtomicLong((Long) map.get("m-out")); List calcList = new ArrayList<>(); Map> dateMap = codeList.stream().collect(Collectors.groupingBy(MesStock::getDate)); dateMap.forEach((date, dateList) -> { List inList = dateList.stream().filter(MesStock::getFlag).collect(Collectors.toList()); List outList = dateList.stream().filter(o -> !o.getFlag()).collect(Collectors.toList()); //统计入库 long inNum = inList.stream().mapToLong(MesStock::getTotal).sum(); //统计出库 long outNum = outList.stream().mapToLong(MesStock::getTotal).sum(); MesStockCalc calc = new MesStockCalc(); calc.setCode(code); calc.setDate(date); calc.setInNum(inNum); calc.setOutNum(outNum); calcList.add(calc); if (localDate.isEqual(date)) { dIn.addAndGet(inNum); dOut.addAndGet(outNum); map.put("in", inList); map.put("out", outList); } if (localDate.getYear() == date.getYear() && localDate.getMonthValue() == date.getMonthValue()) { mIn.addAndGet(inNum); mOut.addAndGet(outNum); } map.put("d-in", dIn.longValue()); map.put("d-out", dOut.longValue()); map.put("m-in", mIn.longValue()); map.put("m-out", mOut.longValue()); }); calcList.sort(Comparator.comparing(MesStockCalc::getDate)); map.put("trend", calcList); }); redisCache.setCacheObject(CacheConstants.VMS_STOCK, result); } }