Merge branch '0.8.X' of https://gitee.com/hdka/klp-oa into 0.8.X

This commit is contained in:
2025-07-18 18:06:27 +08:00
22 changed files with 1107 additions and 49 deletions

View File

@@ -46,4 +46,9 @@ public interface IWmsProductBomService {
* 校验并批量删除产品BOM产品-原材料清单)信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 根据产品ID查询产品BOM产品-原材料清单)列表
*/
List<WmsProductBom> listByProductId(Long productId);
}

View File

@@ -17,6 +17,11 @@ import java.util.List;
*/
public interface IWmsPurchasePlanService {
/**
* 根据订单ID生成推荐采购计划只返回不落库
*/
WmsPurchasePlanVo recommendPurchasePlanByOrder(Long orderId);
/**
* 查询采购计划主
*/

View File

@@ -6,6 +6,7 @@ import com.klp.domain.bo.WmsStockBo;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;
@@ -46,4 +47,9 @@ public interface IWmsStockService {
* 校验并批量删除库存:原材料/产品与库区/库位的存放关系信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 根据原材料ID获取库存数量 (用于生成推荐采购计划)
*/
BigDecimal getStockByItemId(Long rawMaterialId);
}

View File

@@ -109,4 +109,9 @@ public class WmsProductBomServiceImpl implements IWmsProductBomService {
}
return baseMapper.deleteBatchIds(ids) > 0;
}
@Override
public List<WmsProductBom> listByProductId(Long productId) {
return baseMapper.listByProductId(productId);
}
}

View File

@@ -7,6 +7,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.klp.common.utils.StringUtils;
import com.klp.domain.WmsOrderDetail;
import com.klp.domain.WmsProductBom;
import com.klp.domain.vo.WmsOrderDetailVo;
import com.klp.domain.vo.WmsPurchasePlanDetailVo;
import com.klp.service.IWmsOrderDetailService;
import com.klp.service.IWmsProductBomService;
import com.klp.service.IWmsStockService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.klp.domain.bo.WmsPurchasePlanBo;
@@ -15,9 +22,8 @@ import com.klp.domain.WmsPurchasePlan;
import com.klp.mapper.WmsPurchasePlanMapper;
import com.klp.service.IWmsPurchasePlanService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
import java.math.BigDecimal;
import java.util.*;
/**
* 采购计划主Service业务层处理
@@ -31,6 +37,49 @@ public class WmsPurchasePlanServiceImpl implements IWmsPurchasePlanService {
private final WmsPurchasePlanMapper baseMapper;
private final IWmsOrderDetailService wmsOrderDetailService;
private final IWmsProductBomService wmsProductBomService;
private final IWmsStockService wmsStockService;
@Override
public WmsPurchasePlanVo recommendPurchasePlanByOrder(Long orderId) {
// 1. 查询订单明细
List<WmsOrderDetailVo> orderDetails = wmsOrderDetailService.queryListByOrderId(orderId);
// 2. 汇总原材料需求
Map<Long, WmsPurchasePlanDetailVo> materialMap = new HashMap<>();
for (WmsOrderDetailVo detail : orderDetails) {
List<WmsProductBom> bomList = wmsProductBomService.listByProductId(detail.getProductId());
for (WmsProductBom bom : bomList) {
BigDecimal needQty = bom.getQuantity().multiply(detail.getQuantity());
WmsPurchasePlanDetailVo vo = materialMap.getOrDefault(bom.getRawMaterialId(), new WmsPurchasePlanDetailVo());
vo.setRawMaterialId(bom.getRawMaterialId());
vo.setQuantity(vo.getQuantity() == null ? needQty : vo.getQuantity().add(needQty));
vo.setUnit(bom.getUnit());
materialMap.put(bom.getRawMaterialId(), vo);
}
}
// 3. 查询库存并计算推荐采购量
for (WmsPurchasePlanDetailVo vo : materialMap.values()) {
BigDecimal stockQty = wmsStockService.getStockByItemId(vo.getRawMaterialId());
// 要是物料不是产品
BigDecimal recommendQty = BigDecimal.ZERO;
if (stockQty != null) {
recommendQty = vo.getQuantity().subtract(stockQty);
}
vo.setQuantity(recommendQty.compareTo(BigDecimal.ZERO) > 0 ? recommendQty : BigDecimal.ZERO);
}
// 4. 组装主VO
WmsPurchasePlanVo planVo = new WmsPurchasePlanVo();
planVo.setPlanCode("推荐计划-" + orderId);
planVo.setOrderId(orderId);
planVo.setOwner("系统推荐");
planVo.setRemark("仅供参考,实际采购请确认");
planVo.setDetailList(new ArrayList<>(materialMap.values()));
return planVo;
}
/**
* 查询采购计划主
*/

View File

@@ -15,6 +15,7 @@ import com.klp.domain.WmsStock;
import com.klp.mapper.WmsStockMapper;
import com.klp.service.IWmsStockService;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
import java.util.Collection;
@@ -111,4 +112,9 @@ public class WmsStockServiceImpl implements IWmsStockService {
}
return baseMapper.deleteBatchIds(ids) > 0;
}
@Override
public BigDecimal getStockByItemId(Long rawMaterialId) {
return baseMapper.getStockByItemId(rawMaterialId);
}
}