|
@@ -12,7 +12,9 @@ import com.sd.business.entity.bom.bo.BomSpecBo;
|
|
|
import com.sd.business.entity.bom.po.Bom;
|
|
|
import com.sd.business.entity.bom.po.BomClassify;
|
|
|
import com.sd.business.entity.bom.po.BomSpec;
|
|
|
+import com.sd.business.entity.department.constant.DepartmentConstant;
|
|
|
import com.sd.business.entity.department.po.Department;
|
|
|
+import com.sd.business.entity.inventory.po.InventoryFinishedOrder;
|
|
|
import com.sd.business.entity.order.enums.OrderClassifyEnum;
|
|
|
import com.sd.business.entity.order.enums.OrderStatusEnum;
|
|
|
import com.sd.business.entity.order.po.OrderInfo;
|
|
@@ -20,6 +22,7 @@ import com.sd.business.entity.order.po.OrderSku;
|
|
|
import com.sd.business.mapper.board.SalesBoardMapper;
|
|
|
import com.sd.business.service.board.SalesBoardService;
|
|
|
import com.sd.business.service.department.DepartmentService;
|
|
|
+import com.sd.business.service.inventory.InventoryFinishedOrderService;
|
|
|
import com.sd.business.service.order.OrderService;
|
|
|
import com.sd.business.service.order.OrderSkuService;
|
|
|
import com.sd.business.service.sku.SkuSpecService;
|
|
@@ -28,6 +31,7 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
import java.math.BigDecimal;
|
|
|
+import java.math.RoundingMode;
|
|
|
import java.util.*;
|
|
|
import java.util.function.Function;
|
|
|
import java.util.stream.Collectors;
|
|
@@ -60,6 +64,9 @@ public class SalesBoardServiceImpl implements SalesBoardService {
|
|
|
@Autowired
|
|
|
private SkuSpecService skuSpecService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private InventoryFinishedOrderService inventoryFinishedOrderService;
|
|
|
+
|
|
|
@Override
|
|
|
public Page<SkuSalesRankingVo> getSkuSalesRankingPage(SalesBoardSelectDto dto) {
|
|
|
IWrapper<SkuSalesRankingVo> wrapper = IWrapper.getWrapper();
|
|
@@ -262,4 +269,42 @@ public class SalesBoardServiceImpl implements SalesBoardService {
|
|
|
list.add(0, sumBomVo);
|
|
|
return list;
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public List<BzSkuSalesBoardVo> getBzSkuSalesBoard() {
|
|
|
+ IWrapper<SkuSalesRankingVo> wrapper = IWrapper.getWrapper();
|
|
|
+ wrapper.eq("bc", BomClassify::getParentId, 1);
|
|
|
+ wrapper.eq("oi", OrderInfo::getDepartmentId, DepartmentConstant.BZ);
|
|
|
+ wrapper.eq("oi", OrderInfo::getStatus, OrderStatusEnum.COMPLETION_PRODUCTION.getKey());
|
|
|
+ wrapper.ge("oi", OrderInfo::getShippingTime, DateUtil.beginOfDay(DateUtil.offsetDay(new Date(), -30)));
|
|
|
+ wrapper.groupBy("ss.id");
|
|
|
+ wrapper.orderByDesc("salesQuantity");
|
|
|
+ Page<SkuSalesRankingVo> page = salesBoardMapper.getSkuSalesRankingPage(new Page<>(1, 10), wrapper);
|
|
|
+ List<SkuSalesRankingVo> records = page.getRecords();
|
|
|
+ if (records.isEmpty()) {
|
|
|
+ return Collections.emptyList();
|
|
|
+ }
|
|
|
+
|
|
|
+ // 获取所有无源可出库的库存
|
|
|
+ List<InventoryFinishedOrder> inventoryFinishedOrderList = inventoryFinishedOrderService.list(q -> q
|
|
|
+ .eq(InventoryFinishedOrder::getStatus, 1)
|
|
|
+ .isNull(InventoryFinishedOrder::getOrderInfoId));
|
|
|
+ Map<Long, BigDecimal> inventoryFinishedMap = inventoryFinishedOrderList.stream()
|
|
|
+ .collect(Collectors.toMap(
|
|
|
+ InventoryFinishedOrder::getSkuSpecId,
|
|
|
+ InventoryFinishedOrder::getExistingQuantity,
|
|
|
+ BigDecimal::add));
|
|
|
+
|
|
|
+ List<BzSkuSalesBoardVo> salesBoardVoList = records.stream().map(item -> {
|
|
|
+ BzSkuSalesBoardVo vo = new BzSkuSalesBoardVo();
|
|
|
+ vo.setSkuSpecCode(item.getSkuSpecCode());
|
|
|
+ vo.setSkuSpecName(item.getSkuSpecName());
|
|
|
+ vo.setDailySales(item.getSalesQuantity().divide(BigDecimal.valueOf(30), 2, RoundingMode.HALF_UP));
|
|
|
+ vo.setSafetyStock(vo.getDailySales().multiply(BigDecimal.valueOf(3)));
|
|
|
+ vo.setInventoryQuantity(inventoryFinishedMap.getOrDefault(item.getSkuSpecId(), BigDecimal.ZERO));
|
|
|
+ return vo;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+
|
|
|
+ return salesBoardVoList;
|
|
|
+ }
|
|
|
}
|