|
@@ -0,0 +1,470 @@
|
|
|
+package com.sd.business.service.board.impl;
|
|
|
+
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
+import com.ruoyi.common.core.domain.BaseIdPo;
|
|
|
+import com.ruoyi.common.core.domain.BasePo;
|
|
|
+import com.ruoyi.common.core.domain.BaseSelectDto;
|
|
|
+import com.sd.business.entity.board.vo.*;
|
|
|
+import com.sd.business.entity.bom.bo.BomSpecBo;
|
|
|
+import com.sd.business.entity.bom.po.BomSpec;
|
|
|
+import com.sd.business.entity.department.po.Department;
|
|
|
+import com.sd.business.entity.in.emums.InOutTypeEnum;
|
|
|
+import com.sd.business.entity.in.emums.OutDetailTypeEnum;
|
|
|
+import com.sd.business.entity.in.po.InOutStorage;
|
|
|
+import com.sd.business.entity.in.po.InOutStorageBom;
|
|
|
+import com.sd.business.entity.order.po.OrderInfo;
|
|
|
+import com.sd.business.entity.order.po.OrderSku;
|
|
|
+import com.sd.business.entity.outbound.po.OutboundOrder;
|
|
|
+import com.sd.business.entity.production.po.ProductionTask;
|
|
|
+import com.sd.business.entity.sku.po.SkuSpec;
|
|
|
+import com.sd.business.service.board.DailyBoardService;
|
|
|
+import com.sd.business.service.bom.BomSpecService;
|
|
|
+import com.sd.business.service.department.DepartmentService;
|
|
|
+import com.sd.business.service.in.InOutStorageBomService;
|
|
|
+import com.sd.business.service.in.InOutStorageService;
|
|
|
+import com.sd.business.service.order.OrderService;
|
|
|
+import com.sd.business.service.order.OrderSkuService;
|
|
|
+import com.sd.business.service.outbound.OutboundOrderService;
|
|
|
+import com.sd.business.service.production.ProductionTaskService;
|
|
|
+import com.sd.business.service.sku.SkuSpecService;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+
|
|
|
+import java.math.BigDecimal;
|
|
|
+import java.util.*;
|
|
|
+import java.util.function.Function;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+import java.util.stream.Stream;
|
|
|
+
|
|
|
+import static java.util.Comparator.comparing;
|
|
|
+
|
|
|
+@Service
|
|
|
+public class DailyBoardServiceImpl implements DailyBoardService {
|
|
|
+ @Autowired
|
|
|
+ private InOutStorageService inOutStorageService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private InOutStorageBomService inOutStorageBomService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private SkuSpecService skuSpecService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private OrderService orderService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private ProductionTaskService productionTaskService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private OutboundOrderService outboundOrderService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private OrderSkuService orderSkuService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private BomSpecService bomSpecService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private DepartmentService departmentService;
|
|
|
+
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<DailyBoardOutStorageBomVo> getProductionOutStorageList(BaseSelectDto dto) {
|
|
|
+ Date date = dto.getBeginTime();
|
|
|
+ if (date == null) {
|
|
|
+ date = new Date();
|
|
|
+ }
|
|
|
+ Date beginDate = DateUtil.beginOfDay(date);
|
|
|
+ Date endDate = DateUtil.endOfDay(date);
|
|
|
+ List<InOutStorage> inOutStorageList = inOutStorageService.list(q -> q
|
|
|
+ .eq(InOutStorage::getType, InOutTypeEnum.OUT.getKey())
|
|
|
+ .eq(InOutStorage::getDetailType, OutDetailTypeEnum.PRODUCTION.getKey())
|
|
|
+ .between(BasePo::getCreateTime, beginDate, endDate));
|
|
|
+ if (ObjectUtil.isEmpty(inOutStorageList)) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+ List<Long> inOutStorageIds = inOutStorageList.stream().map(BaseIdPo::getId).collect(Collectors.toList());
|
|
|
+ // 查询今日出库bom数据
|
|
|
+ List<InOutStorageBom> outStorageBomList = inOutStorageBomService.list(q -> q.in(InOutStorageBom::getInOutStorageId, inOutStorageIds));
|
|
|
+ Map<Long, InOutStorageBom> map = outStorageBomList.stream()
|
|
|
+ .sorted(comparing(InOutStorageBom::getBomSpecId))
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ InOutStorageBom::getBomSpecId,
|
|
|
+ Function.identity(),
|
|
|
+ (v1, v2) -> {
|
|
|
+ v1.setQuantity(v1.getQuantity().add(v2.getQuantity()));
|
|
|
+ return v1;
|
|
|
+ }
|
|
|
+ ));
|
|
|
+
|
|
|
+ Map<Long, BomSpecBo> bomSpecBoMap = skuSpecService.getBomSpecBoByIdList(map.keySet());
|
|
|
+ // 筛选出主材主库信息
|
|
|
+ List<DailyBoardOutStorageBomVo> list = map.values().stream()
|
|
|
+ .filter(item -> {
|
|
|
+ BomSpecBo bomSpecBo = bomSpecBoMap.get(item.getBomSpecId());
|
|
|
+ return bomSpecBo != null && ObjectUtil.equals(bomSpecBo.getClassifyParentId(), 1L);
|
|
|
+ })
|
|
|
+ .map(item -> {
|
|
|
+ BomSpecBo bomSpecBo = bomSpecBoMap.get(item.getBomSpecId());
|
|
|
+ DailyBoardOutStorageBomVo outStorageVo = new DailyBoardOutStorageBomVo();
|
|
|
+ outStorageVo.setBomSpecName(bomSpecBo.getBomSpecName());
|
|
|
+ outStorageVo.setBomSpecCode(bomSpecBo.getBomSpecCode());
|
|
|
+ outStorageVo.setQuantity(item.getQuantity());
|
|
|
+ return outStorageVo;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ return list;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<OrderBomDifferenceVo> getOrderBomDifferenceList(BaseSelectDto dto) {
|
|
|
+ Date date = dto.getBeginTime();
|
|
|
+ if (date == null) {
|
|
|
+ date = new Date();
|
|
|
+ }
|
|
|
+ Date beginDate = DateUtil.beginOfDay(date);
|
|
|
+ Date endDate = DateUtil.endOfDay(date);
|
|
|
+ // 查询今日订单
|
|
|
+ List<OrderInfo> orderInfoList = orderService.list(q -> q.eq(OrderInfo::getSource, 2)
|
|
|
+ .between(OrderInfo::getWlnCreateTime, beginDate, endDate));
|
|
|
+ // 查询今日生成完成任务
|
|
|
+ Map<Long, List<ProductionTask>> taskMap = productionTaskService.mapKGroup(ProductionTask::getOrderId, q -> q.between(ProductionTask::getCompleteTime, beginDate, endDate));
|
|
|
+ // 查询今日出库单出库数据
|
|
|
+ Map<String, List<OutboundOrder>> outboundOrderMap = outboundOrderService.mapKGroup(OutboundOrder::getOrderWlnCode, q -> q.between(OutboundOrder::getOutboundTime, beginDate, endDate));
|
|
|
+
|
|
|
+ // 获取今日订单sku列表
|
|
|
+ List<Long> orderIds = orderInfoList.stream().map(BaseIdPo::getId).collect(Collectors.toList());
|
|
|
+ List<OrderSku> orderSkuList = orderSkuService.list(q -> q.in(OrderSku::getOrderId, orderIds));
|
|
|
+ Map<Long, List<OrderSku>> map = orderSkuList.stream().collect(Collectors.groupingBy(OrderSku::getOrderId));
|
|
|
+ List<Long> skuSpecIds = orderSkuList.stream().map(OrderSku::getSkuSpecId).collect(Collectors.toList());
|
|
|
+ Map<String, SkuSpec> skuSpecMap = skuSpecService.mapKEntity(SkuSpec::getCode, q -> q.in(SkuSpec::getId, skuSpecIds));
|
|
|
+ // 获取今日订单bom列表
|
|
|
+ List<Long> bomSpecIds = orderSkuList.stream().map(OrderSku::getBomSpecId).collect(Collectors.toList());
|
|
|
+ Map<Long, BomSpec> bomSpecMap = bomSpecService.mapKEntity(BaseIdPo::getId, q -> q.in(BaseIdPo::getId, bomSpecIds));
|
|
|
+
|
|
|
+ Map<Long, OrderBomDifferenceVo> differenceMap = new HashMap<>();
|
|
|
+
|
|
|
+ for (OrderInfo orderInfo : orderInfoList) {
|
|
|
+ // 获取当前订单sku
|
|
|
+ List<OrderSku> orderSkus = map.get(orderInfo.getId());
|
|
|
+ List<ProductionTask> productionTaskList = taskMap.getOrDefault(orderInfo.getId(), Collections.emptyList());
|
|
|
+ List<OutboundOrder> outboundOrderList = outboundOrderMap.getOrDefault(orderInfo.getWlnCode(), Collections.emptyList());
|
|
|
+ if (productionTaskList.isEmpty() && outboundOrderList.isEmpty()) {
|
|
|
+ continue;
|
|
|
+ }
|
|
|
+ for (OrderSku orderSku : orderSkus) {
|
|
|
+ Long orderSkuId = orderSku.getSkuSpecId();
|
|
|
+ BomSpec bomSpec = bomSpecMap.get(orderSku.getBomSpecId());
|
|
|
+ OrderBomDifferenceVo bomDifferenceVo = differenceMap.computeIfAbsent(orderSku.getBomSpecId(), item -> {
|
|
|
+ OrderBomDifferenceVo tempOrderBomDifferenceVo = new OrderBomDifferenceVo();
|
|
|
+ tempOrderBomDifferenceVo.setBomSpecCode(bomSpec.getCode());
|
|
|
+ tempOrderBomDifferenceVo.setMesQuantity(BigDecimal.ZERO);
|
|
|
+ tempOrderBomDifferenceVo.setWlnQuantity(BigDecimal.ZERO);
|
|
|
+ tempOrderBomDifferenceVo.setOrderWlnCodes(new ArrayList<>());
|
|
|
+ return tempOrderBomDifferenceVo;
|
|
|
+ });
|
|
|
+ // mes数量
|
|
|
+ BigDecimal mesCount = productionTaskList.stream()
|
|
|
+ .filter(item -> Objects.equals(item.getSkuSpecId(), orderSkuId))
|
|
|
+ .map(ProductionTask::getCompleteQuantity)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ // 万里牛数量
|
|
|
+ BigDecimal wlnCount = outboundOrderList.stream()
|
|
|
+ .filter(item -> Objects.equals(skuSpecMap.get(item.getSkuSpecCode()).getId(), orderSkuId))
|
|
|
+ .map(OutboundOrder::getQuantity)
|
|
|
+ .reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
|
+ bomDifferenceVo.setMesQuantity(bomDifferenceVo.getMesQuantity().add(mesCount));
|
|
|
+ bomDifferenceVo.setWlnQuantity(bomDifferenceVo.getWlnQuantity().add(wlnCount));
|
|
|
+ if (!Objects.equals(mesCount, wlnCount)) {
|
|
|
+ // 新增差异订单号
|
|
|
+ bomDifferenceVo.getOrderWlnCodes().add(orderInfo.getWlnCode());
|
|
|
+ }
|
|
|
+ differenceMap.put(orderSku.getBomSpecId(), bomDifferenceVo);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 筛选出有差异的bom数据
|
|
|
+ List<OrderBomDifferenceVo> differenceVoList = differenceMap.values().stream().filter(item -> !item.getOrderWlnCodes().isEmpty()).collect(Collectors.toList());
|
|
|
+ return differenceVoList;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public WlnSalesOutStorageVo getWlnSalesOutStorageInfo(BaseSelectDto dto) {
|
|
|
+ WlnSalesOutStorageVo vo = new WlnSalesOutStorageVo();
|
|
|
+ vo.setSumBomCount(BigDecimal.ZERO);
|
|
|
+ vo.setSumOrderCount(0);
|
|
|
+ vo.setBzSumBomCount(BigDecimal.ZERO);
|
|
|
+ vo.setBzSumOrderCount(0);
|
|
|
+ vo.setSySumBomCount(BigDecimal.ZERO);
|
|
|
+ vo.setSySumOrderCount(0);
|
|
|
+ Date date = dto.getBeginTime();
|
|
|
+ if (date == null) {
|
|
|
+ date = new Date();
|
|
|
+ }
|
|
|
+ Date beginDate = DateUtil.beginOfDay(date);
|
|
|
+ Date endDate = DateUtil.endOfDay(date);
|
|
|
+ Department department = departmentService.getOne(q -> q.eq(Department::getName, "佰卓"));
|
|
|
+ // 查询今日出库单出库数据
|
|
|
+ Map<String, List<OutboundOrder>> outboundOrderMap = outboundOrderService.mapKGroup(OutboundOrder::getOrderWlnCode, q -> q.between(OutboundOrder::getOutboundTime, beginDate, endDate));
|
|
|
+ if (ObjectUtil.isEmpty(outboundOrderMap)) {
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+ Set<String> wlnCodeList = outboundOrderMap.keySet();
|
|
|
+ // 出库单相关的订单数据
|
|
|
+ List<OrderInfo> orderList = orderService.list(q -> q.in(OrderInfo::getWlnCode, wlnCodeList));
|
|
|
+ if (ObjectUtil.isEmpty(orderList)) {
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+ vo.setSumOrderCount(orderList.size());
|
|
|
+ // 获取订单sku列表
|
|
|
+ List<Long> orderIds = orderList.stream().map(BaseIdPo::getId).collect(Collectors.toList());
|
|
|
+ List<OrderSku> orderSkuList = orderSkuService.list(q -> q.in(OrderSku::getOrderId, orderIds));
|
|
|
+ List<Long> skuSpecIds = orderSkuList.stream().map(OrderSku::getSkuSpecId).collect(Collectors.toList());
|
|
|
+ Map<String, SkuSpec> skuSpecMap = skuSpecService.mapKEntity(SkuSpec::getCode, q -> q.in(SkuSpec::getId, skuSpecIds));
|
|
|
+ // 获取今日订单bom列表
|
|
|
+ List<Long> bomSpecIds = orderSkuList.stream().map(OrderSku::getBomSpecId).collect(Collectors.toList());
|
|
|
+ Map<Long, BomSpecBo> bomSpecBoMap = skuSpecService.getBomSpecBoByIdList(bomSpecIds);
|
|
|
+
|
|
|
+ Map<Long, DailyBoardOutStorageBomVo> outStorageBomMap = new HashMap<>();
|
|
|
+ Map<Long, DailyBoardOutStorageBomVo> bzOutStorageBomMap = new HashMap<>();
|
|
|
+ Map<Long, DailyBoardOutStorageBomVo> syOutStorageBomMap = new HashMap<>();
|
|
|
+ int bzCount = 0;
|
|
|
+ int syCount = 0;
|
|
|
+ for (OrderInfo orderInfo : orderList) {
|
|
|
+ BigDecimal quantity = BigDecimal.ZERO;
|
|
|
+ // 当前订单出库数据
|
|
|
+ List<OutboundOrder> outboundOrderList = outboundOrderMap.get(orderInfo.getWlnCode());
|
|
|
+ // 出库单中主材bom
|
|
|
+ List<DailyBoardOutStorageBomVo> outStorageBomVoList = new ArrayList<>();
|
|
|
+ for (OutboundOrder outboundOrder : outboundOrderList) {
|
|
|
+ SkuSpec skuSpec = skuSpecMap.get(outboundOrder.getSkuSpecCode());
|
|
|
+ BomSpecBo bomSpecBo = bomSpecBoMap.get(skuSpec.getBomSpecId());
|
|
|
+ if (Objects.equals(bomSpecBo.getClassifyParentId(), 1L)) {
|
|
|
+ DailyBoardOutStorageBomVo bomVo = new DailyBoardOutStorageBomVo();
|
|
|
+ bomVo.setBomSpecId(bomSpecBo.getBomSpecId());
|
|
|
+ bomVo.setBomSpecCode(bomSpecBo.getBomSpecCode());
|
|
|
+ bomVo.setBomSpecName(bomSpecBo.getBomSpecName());
|
|
|
+ bomVo.setQuantity(outboundOrder.getQuantity());
|
|
|
+ outStorageBomVoList.add(bomVo);
|
|
|
+ quantity = quantity.add(outboundOrder.getQuantity());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 保存bom数量
|
|
|
+ vo.setSumBomCount(vo.getSumBomCount().add(quantity));
|
|
|
+
|
|
|
+ outStorageBomMap = Stream.concat(outStorageBomMap.values().stream(), outStorageBomVoList.stream())
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ DailyBoardOutStorageBomVo::getBomSpecId,
|
|
|
+ Function.identity(),
|
|
|
+ (v1, v2) -> {
|
|
|
+ v1.setQuantity(v1.getQuantity().add(v2.getQuantity()));
|
|
|
+ return v1;
|
|
|
+ }
|
|
|
+ ));
|
|
|
+ // 佰卓订单
|
|
|
+ if (ObjectUtil.equals(orderInfo.getDepartmentId(), department.getId())) {
|
|
|
+ bzCount++;
|
|
|
+ vo.setBzSumOrderCount(bzCount);
|
|
|
+ bzOutStorageBomMap = Stream.concat(bzOutStorageBomMap.values().stream(), outStorageBomVoList.stream())
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ DailyBoardOutStorageBomVo::getBomSpecId,
|
|
|
+ Function.identity(),
|
|
|
+ (v1, v2) -> {
|
|
|
+ v1.setQuantity(v1.getQuantity().add(v2.getQuantity()));
|
|
|
+ return v1;
|
|
|
+ }
|
|
|
+ ));
|
|
|
+ vo.setBzSumBomCount(vo.getBzSumBomCount().add(quantity));
|
|
|
+ } else {
|
|
|
+ syCount++;
|
|
|
+ vo.setSySumOrderCount(syCount);
|
|
|
+ syOutStorageBomMap = Stream.concat(syOutStorageBomMap.values().stream(), outStorageBomVoList.stream())
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ DailyBoardOutStorageBomVo::getBomSpecId,
|
|
|
+ Function.identity(),
|
|
|
+ (v1, v2) -> {
|
|
|
+ v1.setQuantity(v1.getQuantity().add(v2.getQuantity()));
|
|
|
+ return v1;
|
|
|
+ }
|
|
|
+ ));
|
|
|
+ vo.setSySumBomCount(vo.getSySumBomCount().add(quantity));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ vo.setOutStorageBomList(new ArrayList<>(outStorageBomMap.values()));
|
|
|
+ vo.setBzOutStorageBomList(new ArrayList<>(bzOutStorageBomMap.values()));
|
|
|
+ vo.setSyOutStorageBomList(new ArrayList<>(syOutStorageBomMap.values()));
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public MesProductionOutStorageVo getMesProductionOutStorageInfo(BaseSelectDto dto) {
|
|
|
+ MesProductionOutStorageVo vo = new MesProductionOutStorageVo();
|
|
|
+ vo.setSumBomCount(BigDecimal.ZERO);
|
|
|
+ vo.setSumOrderCount(0);
|
|
|
+ vo.setBzSumBomCount(BigDecimal.ZERO);
|
|
|
+ vo.setBzSumOrderCount(0);
|
|
|
+ vo.setSySumBomCount(BigDecimal.ZERO);
|
|
|
+ vo.setSySumOrderCount(0);
|
|
|
+ Date date = dto.getBeginTime();
|
|
|
+ if (date == null) {
|
|
|
+ date = new Date();
|
|
|
+ }
|
|
|
+ Date beginDate = DateUtil.beginOfDay(date);
|
|
|
+ Date endDate = DateUtil.endOfDay(date);
|
|
|
+ Department department = departmentService.getOne(q -> q.eq(Department::getName, "佰卓"));
|
|
|
+ // 查询今日出库单出库数据
|
|
|
+ Map<Long, List<ProductionTask>> taskMap = productionTaskService.mapKGroup(ProductionTask::getOrderId, q -> q.between(ProductionTask::getCompleteTime, beginDate, endDate));
|
|
|
+ if (ObjectUtil.isEmpty(taskMap)) {
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+ // 出库单相关的订单数据
|
|
|
+ List<OrderInfo> orderList = orderService.list(q -> q
|
|
|
+ .eq(OrderInfo::getSource, 2)
|
|
|
+ .in(OrderInfo::getId, taskMap.keySet()));
|
|
|
+ vo.setSumOrderCount(orderList.size());
|
|
|
+ if (ObjectUtil.isEmpty(orderList)) {
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+ // 获取订单sku列表
|
|
|
+ List<Long> orderIds = orderList.stream().map(BaseIdPo::getId).collect(Collectors.toList());
|
|
|
+ List<OrderSku> orderSkuList = orderSkuService.list(q -> q.in(OrderSku::getOrderId, orderIds));
|
|
|
+ // 获取今日订单bom列表
|
|
|
+ List<Long> bomSpecIds = orderSkuList.stream().map(OrderSku::getBomSpecId).collect(Collectors.toList());
|
|
|
+ Map<Long, BomSpecBo> bomSpecBoMap = skuSpecService.getBomSpecBoByIdList(bomSpecIds);
|
|
|
+
|
|
|
+ Map<Long, DailyBoardOutStorageBomVo> outStorageBomMap = new HashMap<>();
|
|
|
+ Map<Long, DailyBoardOutStorageBomVo> bzOutStorageBomMap = new HashMap<>();
|
|
|
+ Map<Long, DailyBoardOutStorageBomVo> syOutStorageBomMap = new HashMap<>();
|
|
|
+ int bzCount = 0;
|
|
|
+ int syCount = 0;
|
|
|
+ for (OrderInfo orderInfo : orderList) {
|
|
|
+ BigDecimal quantity = BigDecimal.ZERO;
|
|
|
+ // 当前订单出库数据
|
|
|
+ List<ProductionTask> productionTaskList = taskMap.get(orderInfo.getId());
|
|
|
+ // 出库单中主材bom
|
|
|
+ List<DailyBoardOutStorageBomVo> outStorageBomVoList = new ArrayList<>();
|
|
|
+ for (ProductionTask productionTask : productionTaskList) {
|
|
|
+ BomSpecBo bomSpecBo = bomSpecBoMap.get(productionTask.getBomSpecId());
|
|
|
+ if (Objects.equals(bomSpecBo.getClassifyParentId(), 1L)) {
|
|
|
+ DailyBoardOutStorageBomVo bomVo = new DailyBoardOutStorageBomVo();
|
|
|
+ bomVo.setBomSpecId(bomSpecBo.getBomSpecId());
|
|
|
+ bomVo.setBomSpecCode(bomSpecBo.getBomSpecCode());
|
|
|
+ bomVo.setBomSpecName(bomSpecBo.getBomSpecName());
|
|
|
+ bomVo.setQuantity(productionTask.getCompleteQuantity());
|
|
|
+ outStorageBomVoList.add(bomVo);
|
|
|
+ quantity = quantity.add(productionTask.getCompleteQuantity());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 保存bom数量
|
|
|
+ vo.setSumBomCount(vo.getSumBomCount().add(quantity));
|
|
|
+
|
|
|
+ outStorageBomMap = Stream.concat(outStorageBomMap.values().stream(), outStorageBomVoList.stream())
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ DailyBoardOutStorageBomVo::getBomSpecId,
|
|
|
+ Function.identity(),
|
|
|
+ (v1, v2) -> {
|
|
|
+ v1.setQuantity(v1.getQuantity().add(v2.getQuantity()));
|
|
|
+ return v1;
|
|
|
+ }
|
|
|
+ ));
|
|
|
+ // 佰卓订单
|
|
|
+ if (ObjectUtil.equals(orderInfo.getDepartmentId(), department.getId())) {
|
|
|
+ bzCount++;
|
|
|
+ vo.setBzSumOrderCount(bzCount);
|
|
|
+ bzOutStorageBomMap = Stream.concat(bzOutStorageBomMap.values().stream(), outStorageBomVoList.stream())
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ DailyBoardOutStorageBomVo::getBomSpecId,
|
|
|
+ Function.identity(),
|
|
|
+ (v1, v2) -> {
|
|
|
+ v1.setQuantity(v1.getQuantity().add(v2.getQuantity()));
|
|
|
+ return v1;
|
|
|
+ }
|
|
|
+ ));
|
|
|
+ vo.setBzSumBomCount(vo.getBzSumBomCount().add(quantity));
|
|
|
+ } else {
|
|
|
+ syCount++;
|
|
|
+ vo.setSySumOrderCount(syCount);
|
|
|
+ syOutStorageBomMap = Stream.concat(syOutStorageBomMap.values().stream(), outStorageBomVoList.stream())
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ DailyBoardOutStorageBomVo::getBomSpecId,
|
|
|
+ Function.identity(),
|
|
|
+ (v1, v2) -> {
|
|
|
+ v1.setQuantity(v1.getQuantity().add(v2.getQuantity()));
|
|
|
+ return v1;
|
|
|
+ }
|
|
|
+ ));
|
|
|
+ vo.setSySumBomCount(vo.getSySumBomCount().add(quantity));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ vo.setOutStorageBomList(new ArrayList<>(outStorageBomMap.values()));
|
|
|
+ vo.setBzOutStorageBomList(new ArrayList<>(bzOutStorageBomMap.values()));
|
|
|
+ vo.setSyOutStorageBomList(new ArrayList<>(syOutStorageBomMap.values()));
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public SelfOrderOutStorageVo getSelfOrderOutStorageInfo(BaseSelectDto dto) {
|
|
|
+ SelfOrderOutStorageVo vo = new SelfOrderOutStorageVo();
|
|
|
+ vo.setSumBomCount(BigDecimal.ZERO);
|
|
|
+ vo.setSumOrderCount(0);
|
|
|
+ Date date = dto.getBeginTime();
|
|
|
+ if (date == null) {
|
|
|
+ date = new Date();
|
|
|
+ }
|
|
|
+ Date beginDate = DateUtil.beginOfDay(date);
|
|
|
+ Date endDate = DateUtil.endOfDay(date);
|
|
|
+ // 查询今日出库单出库数据
|
|
|
+ Map<Long, List<ProductionTask>> taskMap = productionTaskService.mapKGroup(ProductionTask::getOrderId, q -> q.between(ProductionTask::getCompleteTime, beginDate, endDate));
|
|
|
+ if (ObjectUtil.isEmpty(taskMap)) {
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+ // 出库单相关的订单数据
|
|
|
+ List<OrderInfo> orderList = orderService.list(q -> q
|
|
|
+ .eq(OrderInfo::getSource, 1)
|
|
|
+ .eq(OrderInfo::getType, 1)
|
|
|
+ .in(OrderInfo::getId, taskMap.keySet()));
|
|
|
+ if (ObjectUtil.isEmpty(orderList)) {
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+ vo.setSumOrderCount(orderList.size());
|
|
|
+ // 获取订单sku列表
|
|
|
+ List<Long> orderIds = orderList.stream().map(BaseIdPo::getId).collect(Collectors.toList());
|
|
|
+ List<OrderSku> orderSkuList = orderSkuService.list(q -> q.in(OrderSku::getOrderId, orderIds));
|
|
|
+ // 获取今日订单bom列表
|
|
|
+ List<Long> bomSpecIds = orderSkuList.stream().map(OrderSku::getBomSpecId).collect(Collectors.toList());
|
|
|
+ Map<Long, BomSpecBo> bomSpecBoMap = skuSpecService.getBomSpecBoByIdList(bomSpecIds);
|
|
|
+
|
|
|
+ Map<Long, DailyBoardOutStorageBomVo> outStorageBomMap = new HashMap<>();
|
|
|
+ for (OrderInfo orderInfo : orderList) {
|
|
|
+ BigDecimal quantity = BigDecimal.ZERO;
|
|
|
+ // 当前订单出库数据
|
|
|
+ List<ProductionTask> productionTaskList = taskMap.get(orderInfo.getId());
|
|
|
+ // 出库单中主材bom
|
|
|
+ List<DailyBoardOutStorageBomVo> outStorageBomVoList = new ArrayList<>();
|
|
|
+ for (ProductionTask productionTask : productionTaskList) {
|
|
|
+ BomSpecBo bomSpecBo = bomSpecBoMap.get(productionTask.getBomSpecId());
|
|
|
+ if (Objects.equals(bomSpecBo.getClassifyParentId(), 1L)) {
|
|
|
+ DailyBoardOutStorageBomVo bomVo = new DailyBoardOutStorageBomVo();
|
|
|
+ bomVo.setBomSpecId(bomSpecBo.getBomSpecId());
|
|
|
+ bomVo.setBomSpecCode(bomSpecBo.getBomSpecCode());
|
|
|
+ bomVo.setBomSpecName(bomSpecBo.getBomSpecName());
|
|
|
+ bomVo.setQuantity(productionTask.getCompleteQuantity());
|
|
|
+ outStorageBomVoList.add(bomVo);
|
|
|
+ quantity = quantity.add(productionTask.getCompleteQuantity());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ // 保存bom数量
|
|
|
+ vo.setSumBomCount(vo.getSumBomCount().add(quantity));
|
|
|
+ outStorageBomMap = Stream.concat(outStorageBomMap.values().stream(), outStorageBomVoList.stream())
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ DailyBoardOutStorageBomVo::getBomSpecId,
|
|
|
+ Function.identity(),
|
|
|
+ (v1, v2) -> {
|
|
|
+ v1.setQuantity(v1.getQuantity().add(v2.getQuantity()));
|
|
|
+ return v1;
|
|
|
+ }
|
|
|
+ ));
|
|
|
+ }
|
|
|
+ vo.setOutStorageBomList(new ArrayList<>(outStorageBomMap.values()));
|
|
|
+ return vo;
|
|
|
+ }
|
|
|
+}
|