|
@@ -7,11 +7,13 @@ import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.ruoyi.common.constant.StatusConstant;
|
|
|
+import com.ruoyi.common.core.domain.BaseIdPo;
|
|
|
import com.ruoyi.common.utils.wrapper.IWrapper;
|
|
|
import com.sd.business.entity.bom.dto.BomSpecSelectDto;
|
|
|
import com.sd.business.entity.bom.po.Bom;
|
|
|
import com.sd.business.entity.bom.po.BomSpec;
|
|
|
import com.sd.business.entity.bom.vo.BomSpecVo;
|
|
|
+import com.sd.business.entity.department.constant.DepartmentConstant;
|
|
|
import com.sd.business.entity.inventory.po.Inventory;
|
|
|
import com.sd.business.entity.purchase.dto.PurchaseBoardSelectDto;
|
|
|
import com.sd.business.entity.purchase.dto.PurchaseBomDetailsSelectDto;
|
|
@@ -21,11 +23,13 @@ import com.sd.business.entity.purchase.enums.PurchaseStatusEnum;
|
|
|
import com.sd.business.entity.purchase.po.Purchase;
|
|
|
import com.sd.business.entity.purchase.po.PurchaseBom;
|
|
|
import com.sd.business.entity.purchase.vo.*;
|
|
|
+import com.sd.business.entity.warehouse.constant.WarehouseConstant;
|
|
|
import com.sd.business.mapper.purchase.PurchaseBomMapper;
|
|
|
import com.sd.business.service.bom.BomClassifyService;
|
|
|
import com.sd.business.service.bom.BomSpecService;
|
|
|
import com.sd.business.service.in.InOutStorageService;
|
|
|
import com.sd.business.service.inventory.InventoryService;
|
|
|
+import com.sd.business.service.order.OrderSalesShipmentStatisticsService;
|
|
|
import com.sd.business.service.order.OrderService;
|
|
|
import com.sd.business.service.purchase.PurchaseBomService;
|
|
|
import com.sd.framework.util.Assert;
|
|
@@ -35,10 +39,7 @@ import org.springframework.stereotype.Service;
|
|
|
|
|
|
import java.math.BigDecimal;
|
|
|
import java.math.RoundingMode;
|
|
|
-import java.util.ArrayList;
|
|
|
-import java.util.Date;
|
|
|
-import java.util.List;
|
|
|
-import java.util.Map;
|
|
|
+import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
|
|
@@ -68,6 +69,9 @@ public class PurchaseBomServiceImpl extends ServiceImpl<PurchaseBomMapper, Purch
|
|
|
@Autowired
|
|
|
private InventoryService inventoryService;
|
|
|
|
|
|
+ @Autowired
|
|
|
+ private OrderSalesShipmentStatisticsService orderSalesShipmentStatisticsService;
|
|
|
+
|
|
|
@Override
|
|
|
public Page<PurchaseBomSelectVo> getPage(PurchaseBomSelectDto dto) {
|
|
|
Assert.notEmpty(dto.getPurchaseId(), "采购合同id不能为空");
|
|
@@ -155,12 +159,38 @@ public class PurchaseBomServiceImpl extends ServiceImpl<PurchaseBomMapper, Purch
|
|
|
Page<PurchaseBomBoardVo> page = new Page<>();
|
|
|
page.setSize(bomSpecVoPage.getSize());
|
|
|
page.setTotal(bomSpecVoPage.getTotal());
|
|
|
+ if (ObjectUtil.isEmpty(records)) {
|
|
|
+ return page;
|
|
|
+ }
|
|
|
Date date = new Date();
|
|
|
List<PurchaseBomBoardVo> list = new ArrayList<>();
|
|
|
+
|
|
|
+ List<Long> bomSpecIds = records.stream().map(BaseIdPo::getId).collect(Collectors.toList());
|
|
|
+ // 查询库存数据
|
|
|
+ Map<Long, List<Inventory>> inventorMap = inventoryService.mapKGroup(
|
|
|
+ Inventory::getBomSpecId,
|
|
|
+ q -> q.in(Inventory::getBomSpecId, bomSpecIds)
|
|
|
+ .eq(Inventory::getDepartmentId, DepartmentConstant.SD_SPORTS)
|
|
|
+ .in(Inventory::getWarehouseId,
|
|
|
+ Arrays.asList(WarehouseConstant.SEMI_FINISHED_PRODUCT, WarehouseConstant.PACKAGING_MATERIAL)));
|
|
|
+
|
|
|
+ // 查询周转率数据
|
|
|
+ Map<Long, BigDecimal> turnoverRateMap = orderSalesShipmentStatisticsService.getTurnoverRateMapByBomSpecIds(bomSpecIds);
|
|
|
+
|
|
|
+ // 获取bom的下一批到货天数
|
|
|
+ IWrapper<PurchaseBom> wrapper = IWrapper.getWrapper();
|
|
|
+ wrapper.in("pb", PurchaseBom::getBomSpecId, bomSpecIds);
|
|
|
+ wrapper.apply("pb.purchase_quantity > pb.arrival_quantity");
|
|
|
+ wrapper.eq("p", Purchase::getStorageStatus, StatusConstant.NO);
|
|
|
+ wrapper.gt("p", Purchase::getDeliveryDate, date);
|
|
|
+ wrapper.groupBy("pb.bom_spec_id");
|
|
|
+ List<PurchaseInTransitBomVo> deliveryDateList = this.baseMapper.getPurchaseBomDeliveryDate(wrapper);
|
|
|
+ Map<Long, Date> deliveryDateMap = deliveryDateList.stream().collect(Collectors.toMap(PurchaseInTransitBomVo::getBomSpecId, PurchaseInTransitBomVo::getDeliveryDate));
|
|
|
+
|
|
|
for (BomSpecVo record : records) {
|
|
|
PurchaseBomBoardVo purchaseBomBoard = new PurchaseBomBoardVo();
|
|
|
Long bomSpecId = record.getId();
|
|
|
- List<Inventory> inventoryList = inventoryService.list(q -> q.eq(Inventory::getBomSpecId, bomSpecId));
|
|
|
+ List<Inventory> inventoryList = inventorMap.get(bomSpecId);
|
|
|
|
|
|
// 当前库存数
|
|
|
BigDecimal inventoryQuantity = ObjectUtil.isEmpty(inventoryList) ? BigDecimal.ZERO : StreamUtil.bigDecimalAdd(inventoryList, Inventory::getQuantity);
|
|
@@ -196,14 +226,7 @@ public class PurchaseBomServiceImpl extends ServiceImpl<PurchaseBomMapper, Purch
|
|
|
purchaseBomBoard.setInTransitSum(this.getPurchaseBomInTransitSum(bomSpecId));
|
|
|
|
|
|
// 获取下一批到货天数
|
|
|
- IWrapper<PurchaseBom> wrapper = IWrapper.getWrapper();
|
|
|
- wrapper.eq("pb", PurchaseBom::getBomSpecId, bomSpecId);
|
|
|
- wrapper.apply("pb.purchase_quantity > pb.arrival_quantity");
|
|
|
- wrapper.eq("p", Purchase::getStorageStatus, StatusConstant.NO);
|
|
|
- wrapper.gt("p", Purchase::getDeliveryDate, date);
|
|
|
- wrapper.orderByAsc("p", Purchase::getDeliveryDate);
|
|
|
- wrapper.last("limit 1");
|
|
|
- Date deliveryDate = this.baseMapper.getPurchaseBomDeliveryDate(wrapper);
|
|
|
+ Date deliveryDate = deliveryDateMap.get(bomSpecId);
|
|
|
long nextDeliveryDays = 0L;
|
|
|
if (ObjectUtil.isNotEmpty(deliveryDate)) {
|
|
|
nextDeliveryDays = DateUtil.between(date, deliveryDate, DateUnit.DAY);
|
|
@@ -226,6 +249,7 @@ public class PurchaseBomServiceImpl extends ServiceImpl<PurchaseBomMapper, Purch
|
|
|
purchaseBomBoard.setOutStorageQuantitySixtyDays(orderService.getOrderBomSpecOutStorageQuantity(record.getId(), DateUtil.offsetDay(date, -60), date));
|
|
|
purchaseBomBoard.setOutStorageWeekOnWeekRatio(weekOnWeekRatio);
|
|
|
purchaseBomBoard.setNextDeliveryDays((int) nextDeliveryDays);
|
|
|
+ purchaseBomBoard.setTurnoverRate(turnoverRateMap.get(bomSpecId));
|
|
|
list.add(purchaseBomBoard);
|
|
|
}
|
|
|
page.setRecords(list);
|