refactor(wms): 移除产品BOM相关模块和采购计划功能模块

- 删除产品BOM(Bill of Materials)相关的控制器、服务、实体类及映射文件
- 移除了WmsProductBomController控制器及相关接口实现
- 清理了IWmsProductBomService服务接口与WmsProductBomServiceImpl实现类
- 移除了WmsProductBom实体类及其对应的BO/VO对象- 删除WmsProductBomMapper接口及XML配置文件
- 更新WmsMaterialCoilServiceImpl依赖注入,移除对IWmsProductBomService的引用
- 调整WmsCoilPendingActionMapper.xml路径从wms目录迁移至klp目录下
- 整理采购计划相关模块代码结构,确保模块清晰分离
This commit is contained in:
2025-11-13 13:24:09 +08:00
parent 1bccfe57d8
commit 9c88669751
28 changed files with 65 additions and 1884 deletions

View File

@@ -32,7 +32,6 @@ import com.klp.service.IWmsGenerateRecordService;
import com.klp.service.IWmsWarehouseService;
import com.klp.service.IWmsActualWarehouseService;
import com.klp.service.IWmsRawMaterialService;
import com.klp.service.IWmsProductBomService;
import com.klp.service.IWmsBomItemService;
import com.klp.domain.vo.WmsActualWarehouseVo;
import com.fasterxml.jackson.databind.ObjectMapper;
@@ -63,7 +62,6 @@ public class WmsMaterialCoilServiceImpl implements IWmsMaterialCoilService {
private final IWmsWarehouseService warehouseService;
private final IWmsActualWarehouseService actualWarehouseService;
private final IWmsRawMaterialService rawMaterialService;
private final IWmsProductBomService productBomService;
private final IWmsBomItemService bomItemService;
/**

View File

@@ -1,128 +0,0 @@
package com.klp.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
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 lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.klp.domain.bo.WmsProductBomBo;
import com.klp.domain.vo.WmsProductBomVo;
import com.klp.domain.WmsProductBom;
import com.klp.mapper.WmsProductBomMapper;
import com.klp.service.IWmsProductBomService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 产品BOM产品-原材料清单Service业务层处理
*
* @author Joshi
* @date 2025-07-18
*/
@RequiredArgsConstructor
@Service
public class WmsProductBomServiceImpl implements IWmsProductBomService {
private final WmsProductBomMapper baseMapper;
/**
* 查询产品BOM产品-原材料清单)
*/
@Override
public WmsProductBomVo queryById(Long bomId){
return baseMapper.selectVoById(bomId);
}
/**
* 查询产品BOM产品-原材料清单)列表
*/
@Override
public TableDataInfo<WmsProductBomVo> queryPageList(WmsProductBomBo bo, PageQuery pageQuery) {
QueryWrapper<WmsProductBom> qw = buildQueryWrapperPlus(bo);
Page<WmsProductBomVo> result = baseMapper.selectVoPagePlus(pageQuery.build(), qw);
return TableDataInfo.build(result);
}
/**
* 查询产品BOM产品-原材料清单)列表
*/
@Override
public List<WmsProductBomVo> queryList(WmsProductBomBo bo) {
LambdaQueryWrapper<WmsProductBom> qw = buildQueryWrapper(bo);
return baseMapper.selectVoList(qw);
}
private LambdaQueryWrapper<WmsProductBom> buildQueryWrapper(WmsProductBomBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<WmsProductBom> lqw = new LambdaQueryWrapper<>();
lqw.eq(bo.getProductId() != null, WmsProductBom::getProductId, bo.getProductId());
lqw.eq(bo.getRawMaterialId() != null, WmsProductBom::getRawMaterialId, bo.getRawMaterialId());
lqw.eq(bo.getQuantity() != null, WmsProductBom::getQuantity, bo.getQuantity());
lqw.eq(StringUtils.isNotBlank(bo.getUnit()), WmsProductBom::getUnit, bo.getUnit());
return lqw;
}
private QueryWrapper<WmsProductBom> buildQueryWrapperPlus(WmsProductBomBo bo) {
Map<String, Object> params = bo.getParams();
QueryWrapper<WmsProductBom> qw = new QueryWrapper<>();
qw.eq("b.del_flag", 0); // 手动添加逻辑删除条件
qw.eq(bo.getProductId() != null, "b.product_id", bo.getProductId());
qw.eq(bo.getRawMaterialId() != null, "b.raw_material_id", bo.getRawMaterialId());
qw.eq(bo.getQuantity() != null, "b.quantity", bo.getQuantity());
qw.eq(StringUtils.isNotBlank(bo.getUnit()), "b.unit", bo.getUnit());
return qw;
}
/**
* 新增产品BOM产品-原材料清单)
*/
@Override
public Boolean insertByBo(WmsProductBomBo bo) {
WmsProductBom add = BeanUtil.toBean(bo, WmsProductBom.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setBomId(add.getBomId());
}
return flag;
}
/**
* 修改产品BOM产品-原材料清单)
*/
@Override
public Boolean updateByBo(WmsProductBomBo bo) {
WmsProductBom update = BeanUtil.toBean(bo, WmsProductBom.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(WmsProductBom entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除产品BOM产品-原材料清单)
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
@Override
public List<WmsProductBom> listByProductId(Long productId) {
return baseMapper.listByProductId(productId);
}
}

View File

@@ -1,128 +0,0 @@
package com.klp.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.klp.common.utils.StringUtils;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import com.klp.domain.bo.WmsPurchasePlanDetailBo;
import com.klp.domain.vo.WmsPurchasePlanDetailVo;
import com.klp.domain.WmsPurchasePlanDetail;
import com.klp.mapper.WmsPurchasePlanDetailMapper;
import com.klp.service.IWmsPurchasePlanDetailService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 采购计划明细Service业务层处理
*
* @author Joshi
* @date 2025-07-18
*/
@RequiredArgsConstructor
@Service
public class WmsPurchasePlanDetailServiceImpl implements IWmsPurchasePlanDetailService {
private final WmsPurchasePlanDetailMapper baseMapper;
/**
* 查询采购计划明细
*/
@Override
public WmsPurchasePlanDetailVo queryById(Long detailId){
return baseMapper.selectVoById(detailId);
}
/**
* 查询采购计划明细列表
*/
@Override
public TableDataInfo<WmsPurchasePlanDetailVo> queryPageList(WmsPurchasePlanDetailBo bo, PageQuery pageQuery) {
QueryWrapper<WmsPurchasePlanDetail> qw = buildQueryWrapperPlus(bo);
Page<WmsPurchasePlanDetailVo> result = baseMapper.selectVoPagePlus(pageQuery.build(), qw);
return TableDataInfo.build(result);
}
/**
* 查询采购计划明细列表
*/
@Override
public List<WmsPurchasePlanDetailVo> queryList(WmsPurchasePlanDetailBo bo) {
LambdaQueryWrapper<WmsPurchasePlanDetail> qw = buildQueryWrapper(bo);
return baseMapper.selectVoList(qw);
}
private LambdaQueryWrapper<WmsPurchasePlanDetail> buildQueryWrapper(WmsPurchasePlanDetailBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<WmsPurchasePlanDetail> lqw = new LambdaQueryWrapper<>();
lqw.eq(bo.getPlanId() != null, WmsPurchasePlanDetail::getPlanId, bo.getPlanId());
lqw.eq(bo.getRawMaterialId() != null, WmsPurchasePlanDetail::getRawMaterialId, bo.getRawMaterialId());
lqw.eq(StringUtils.isNotBlank(bo.getOwner()), WmsPurchasePlanDetail::getOwner, bo.getOwner());
lqw.eq(bo.getQuantity() != null, WmsPurchasePlanDetail::getQuantity, bo.getQuantity());
lqw.eq(StringUtils.isNotBlank(bo.getUnit()), WmsPurchasePlanDetail::getUnit, bo.getUnit());
lqw.like(StringUtils.isNotBlank(bo.getDetailCode()), WmsPurchasePlanDetail::getDetailCode, bo.getDetailCode());
return lqw;
}
private QueryWrapper<WmsPurchasePlanDetail> buildQueryWrapperPlus(WmsPurchasePlanDetailBo bo) {
Map<String, Object> params = bo.getParams();
QueryWrapper<WmsPurchasePlanDetail> qw = new QueryWrapper<>();
qw.eq("wpd.del_flag", 0); // 手动添加逻辑删除条件
qw.eq(bo.getPlanId() != null, "wpd.plan_id", bo.getPlanId());
qw.eq(bo.getRawMaterialId() != null, "wpd.raw_material_id", bo.getRawMaterialId());
qw.eq(StringUtils.isNotBlank(bo.getOwner()), "wpd.owner", bo.getOwner());
qw.eq(bo.getQuantity() != null, "wpd.quantity", bo.getQuantity());
qw.eq(StringUtils.isNotBlank(bo.getUnit()), "wpd.unit", bo.getUnit());
qw.like(StringUtils.isNotBlank(bo.getDetailCode()), "wpd.detail_code", bo.getDetailCode());
return qw;
}
/**
* 新增采购计划明细
*/
@Override
public Boolean insertByBo(WmsPurchasePlanDetailBo bo) {
WmsPurchasePlanDetail add = BeanUtil.toBean(bo, WmsPurchasePlanDetail.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setDetailId(add.getDetailId());
}
return flag;
}
/**
* 修改采购计划明细
*/
@Override
public Boolean updateByBo(WmsPurchasePlanDetailBo bo) {
WmsPurchasePlanDetail update = BeanUtil.toBean(bo, WmsPurchasePlanDetail.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(WmsPurchasePlanDetail entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除采购计划明细
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
}

View File

@@ -1,208 +0,0 @@
package com.klp.service.impl;
import cn.hutool.core.bean.BeanUtil;
import com.klp.common.core.page.TableDataInfo;
import com.klp.common.core.domain.PageQuery;
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.WmsProductBom;
import com.klp.domain.WmsPurchasePlanDetail;
import com.klp.domain.WmsRawMaterial;
import com.klp.domain.vo.WmsOrderDetailVo;
import com.klp.domain.vo.WmsPurchasePlanDetailVo;
import com.klp.mapper.WmsPurchasePlanDetailMapper;
import com.klp.mapper.WmsRawMaterialMapper;
import com.klp.service.*;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import com.klp.domain.bo.WmsPurchasePlanBo;
import com.klp.domain.vo.WmsPurchasePlanVo;
import com.klp.domain.WmsPurchasePlan;
import com.klp.mapper.WmsPurchasePlanMapper;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
/**
* 采购计划主Service业务层处理
*
* @author Joshi
* @date 2025-07-18
*/
@RequiredArgsConstructor
@Service
public class WmsPurchasePlanServiceImpl implements IWmsPurchasePlanService {
private final WmsPurchasePlanMapper baseMapper;
private final IWmsOrderDetailService wmsOrderDetailService;
private final IWmsProductBomService wmsProductBomService;
private final IWmsStockService wmsStockService;
@Resource
private WmsPurchasePlanDetailMapper wmsPurchasePlanDetailMapper;
@Resource
private WmsRawMaterialMapper wmsRawMaterialMapper;
@Transactional
@Override
public Boolean insertWithDetails(WmsPurchasePlanVo planVo) {
// 1. 保存主表
WmsPurchasePlan plan = new WmsPurchasePlan();
BeanUtils.copyProperties(planVo, plan);
int flag = 0;
flag += baseMapper.insert(plan);
// 2. 保存明细表
for (WmsPurchasePlanDetailVo detailVo : planVo.getDetailList()) {
WmsPurchasePlanDetail detail = new WmsPurchasePlanDetail();
BeanUtils.copyProperties(detailVo, detail);
detail.setPlanId(plan.getPlanId()); // 关联主表ID
flag += wmsPurchasePlanDetailMapper.insert(detail);
}
return flag > 0;
}
// @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());
// // 挂载原材料名称编号
// WmsRawMaterial wmsRawMaterial = wmsRawMaterialMapper.selectById(bom.getRawMaterialId());
// vo.setRawMaterialName(wmsRawMaterial.getRawMaterialName());
// vo.setRawMaterialCode(wmsRawMaterial.getRawMaterialCode());
// materialMap.put(bom.getRawMaterialId(), vo);
// }
// }
// // 3. 查询库存并计算推荐采购量
// for (WmsPurchasePlanDetailVo vo : materialMap.values()) {
// // 需求量
// vo.setDemand(vo.getQuantity());
// BigDecimal stockQty = wmsStockService.getStockByItemId(vo.getRawMaterialId());
// // 库存量
// if(stockQty == null){
// stockQty = BigDecimal.ZERO;
// }
// vo.setInventory(stockQty);
// // 在途量
// BigDecimal onTheWayQty = BigDecimal.ZERO;
// BigDecimal byRawMaterialIdAndOnTheWay =
// wmsPurchasePlanDetailMapper.getByRawMaterialIdAndOnTheWay(vo.getRawMaterialId());
// if (byRawMaterialIdAndOnTheWay != null) {
// onTheWayQty = byRawMaterialIdAndOnTheWay;
// }
// vo.setOnTheWay(onTheWayQty);
// // 计算推荐采购量
// BigDecimal recommendQty = vo.getQuantity().subtract(onTheWayQty).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;
// }
/**
* 查询采购计划主
*/
@Override
public WmsPurchasePlanVo queryById(Long planId){
return baseMapper.selectVoById(planId);
}
/**
* 查询采购计划主列表
*/
@Override
public TableDataInfo<WmsPurchasePlanVo> queryPageList(WmsPurchasePlanBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<WmsPurchasePlan> lqw = buildQueryWrapper(bo);
Page<WmsPurchasePlanVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询采购计划主列表
*/
@Override
public List<WmsPurchasePlanVo> queryList(WmsPurchasePlanBo bo) {
LambdaQueryWrapper<WmsPurchasePlan> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<WmsPurchasePlan> buildQueryWrapper(WmsPurchasePlanBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<WmsPurchasePlan> lqw = Wrappers.lambdaQuery();
lqw.eq(StringUtils.isNotBlank(bo.getPlanCode()), WmsPurchasePlan::getPlanCode, bo.getPlanCode());
lqw.eq(StringUtils.isNotBlank(bo.getOwner()), WmsPurchasePlan::getOwner, bo.getOwner());
lqw.eq(bo.getOrderId() != null, WmsPurchasePlan::getOrderId, bo.getOrderId());
lqw.eq(bo.getStatus() != null, WmsPurchasePlan::getStatus, bo.getStatus());
return lqw;
}
/**
* 新增采购计划主
*/
@Override
public Boolean insertByBo(WmsPurchasePlanBo bo) {
WmsPurchasePlan add = BeanUtil.toBean(bo, WmsPurchasePlan.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setPlanId(add.getPlanId());
}
return flag;
}
/**
* 修改采购计划主
*/
@Override
public Boolean updateByBo(WmsPurchasePlanBo bo) {
WmsPurchasePlan update = BeanUtil.toBean(bo, WmsPurchasePlan.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(WmsPurchasePlan entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除采购计划主
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
// 逻辑删除采购明细
LambdaQueryWrapper<WmsPurchasePlanDetail> lqw = Wrappers.lambdaQuery();
lqw.in(WmsPurchasePlanDetail::getPlanId, ids);
wmsPurchasePlanDetailMapper.delete(lqw);
// 逻辑删除采购计划主表
return baseMapper.deleteBatchIds(ids) > 0;
}
}

View File

@@ -15,15 +15,9 @@ import com.klp.domain.WmsRawMaterial;
import com.klp.mapper.WmsRawMaterialMapper;
import com.klp.service.IWmsRawMaterialService;
import com.klp.service.IWmsStockService;
import com.klp.service.IWmsPurchasePlanDetailService;
import com.klp.service.IWmsOrderDetailService;
import com.klp.service.IWmsProductBomService;
import com.klp.service.IWmsOrderService;
import com.klp.domain.bo.WmsPurchasePlanDetailBo;
import com.klp.domain.bo.WmsOrderDetailBo;
import com.klp.domain.bo.WmsProductBomBo;
import com.klp.domain.vo.WmsPurchasePlanDetailVo;
import com.klp.domain.vo.WmsProductBomVo;
import com.klp.domain.vo.WmsOrderDetailVo;
import com.klp.domain.vo.WmsOrderVo;
import com.klp.service.IWmsBomService;
@@ -50,10 +44,7 @@ import java.util.Arrays;
public class WmsRawMaterialServiceImpl implements IWmsRawMaterialService {
private final WmsRawMaterialMapper baseMapper;
private final IWmsStockService stockService;
private final IWmsPurchasePlanDetailService purchasePlanDetailService;
private final IWmsOrderDetailService orderDetailService;
private final IWmsProductBomService productBomService;
private final IWmsOrderService orderService;
private final IWmsBomService wmsBomService;
private final IWmsBomItemService wmsBomItemService;
@@ -133,57 +124,57 @@ public class WmsRawMaterialServiceImpl implements IWmsRawMaterialService {
// }
// }
/**
* 获取在途量
*/
private BigDecimal getOnTheWayQuantity(Long rawMaterialId) {
WmsPurchasePlanDetailBo bo = new WmsPurchasePlanDetailBo();
bo.setRawMaterialId(rawMaterialId);
List<WmsPurchasePlanDetailVo> list = purchasePlanDetailService.queryList(bo);
return list.stream()
.filter(item -> item.getStatus() != null && item.getStatus() == 1) // 在途状态
.map(WmsPurchasePlanDetailVo::getQuantity)
.filter(qty -> qty != null)
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
/**
* 获取需求量
*/
private BigDecimal getDemandQuantity(Long rawMaterialId) {
// 先查询包含该原材料的BOM
WmsProductBomBo bomBo = new WmsProductBomBo();
bomBo.setRawMaterialId(rawMaterialId);
List<WmsProductBomVo> bomList = productBomService.queryList(bomBo);
if (bomList.isEmpty()) {
return BigDecimal.ZERO;
}
// 查询这些产品的订单明细
BigDecimal totalDemand = BigDecimal.ZERO;
for (WmsProductBomVo bom : bomList) {
WmsOrderDetailBo orderDetailBo = new WmsOrderDetailBo();
orderDetailBo.setProductId(bom.getProductId());
List<WmsOrderDetailVo> orderDetails = orderDetailService.queryList(orderDetailBo);
// 逐个查询订单状态,过滤出有效订单的明细
BigDecimal productDemand = BigDecimal.ZERO;
for (WmsOrderDetailVo detail : orderDetails) {
// 查询订单主表状态
WmsOrderVo order = orderService.queryById(detail.getOrderId());
if (order != null && order.getOrderStatus() != null && order.getOrderStatus() < 2) {
// 新建、生产中状态,累加数量
if (detail.getQuantity() != null) {
productDemand = productDemand.add(detail.getQuantity());
}
}
}
// 需求量 = 产品需求量 × BOM用量
if (bom.getQuantity() != null) {
totalDemand = totalDemand.add(productDemand.multiply(bom.getQuantity()));
}
}
return totalDemand;
}
// /**
// * 获取在途量
// */
// private BigDecimal getOnTheWayQuantity(Long rawMaterialId) {
// WmsPurchasePlanDetailBo bo = new WmsPurchasePlanDetailBo();
// bo.setRawMaterialId(rawMaterialId);
// List<WmsPurchasePlanDetailVo> list = purchasePlanDetailService.queryList(bo);
// return list.stream()
// .filter(item -> item.getStatus() != null && item.getStatus() == 1) // 在途状态
// .map(WmsPurchasePlanDetailVo::getQuantity)
// .filter(qty -> qty != null)
// .reduce(BigDecimal.ZERO, BigDecimal::add);
// }
//
// /**
// * 获取需求量
// */
// private BigDecimal getDemandQuantity(Long rawMaterialId) {
// // 先查询包含该原材料的BOM
// WmsProductBomBo bomBo = new WmsProductBomBo();
// bomBo.setRawMaterialId(rawMaterialId);
// List<WmsProductBomVo> bomList = productBomService.queryList(bomBo);
// if (bomList.isEmpty()) {
// return BigDecimal.ZERO;
// }
// // 查询这些产品的订单明细
// BigDecimal totalDemand = BigDecimal.ZERO;
// for (WmsProductBomVo bom : bomList) {
// WmsOrderDetailBo orderDetailBo = new WmsOrderDetailBo();
// orderDetailBo.setProductId(bom.getProductId());
// List<WmsOrderDetailVo> orderDetails = orderDetailService.queryList(orderDetailBo);
// // 逐个查询订单状态,过滤出有效订单的明细
// BigDecimal productDemand = BigDecimal.ZERO;
// for (WmsOrderDetailVo detail : orderDetails) {
// // 查询订单主表状态
// WmsOrderVo order = orderService.queryById(detail.getOrderId());
// if (order != null && order.getOrderStatus() != null && order.getOrderStatus() < 2) {
// // 新建、生产中状态,累加数量
// if (detail.getQuantity() != null) {
// productDemand = productDemand.add(detail.getQuantity());
// }
// }
// }
// // 需求量 = 产品需求量 × BOM用量
// if (bom.getQuantity() != null) {
// totalDemand = totalDemand.add(productDemand.multiply(bom.getQuantity()));
// }
// }
//
// return totalDemand;
// }
private LambdaQueryWrapper<WmsRawMaterial> buildQueryWrapper(WmsRawMaterialBo bo) {
Map<String, Object> params = bo.getParams();

View File

@@ -5,10 +5,8 @@ import com.klp.common.utils.StringUtils;
import com.klp.domain.bo.WmsSalesScriptGeneratorBo;
import com.klp.domain.vo.WmsProductSalesScriptVo;
import com.klp.domain.vo.WmsProductVo;
import com.klp.domain.WmsProductBom;
import com.klp.service.IWmsSalesScriptGeneratorService;
import com.klp.service.IWmsProductService;
import com.klp.service.IWmsProductBomService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Qualifier;
@@ -36,7 +34,6 @@ import java.util.regex.Pattern;
public class WmsSalesScriptGeneratorServiceImpl implements IWmsSalesScriptGeneratorService {
private final IWmsProductService iWmsProductService;
private final IWmsProductBomService iWmsProductBomService;
@Qualifier("salesScriptRestTemplate")
private final RestTemplate restTemplate;
@@ -65,11 +62,9 @@ public class WmsSalesScriptGeneratorServiceImpl implements IWmsSalesScriptGenera
throw new RuntimeException("产品不存在");
}
// 获取BOM信息
List<WmsProductBom> bomList = iWmsProductBomService.listByProductId(bo.getProductId());
// 生成话术
String aiResponse = callAiApi(product, bomList, bo);
String aiResponse = callAiApi(product, bo);
//打印这个aiResponse
System.out.println("AI Response: " + aiResponse);
List<Map<String, Object>> scripts = parseAiResponse(aiResponse);
@@ -189,8 +184,8 @@ public class WmsSalesScriptGeneratorServiceImpl implements IWmsSalesScriptGenera
/**
* 调用AI API
*/
private String callAiApi(WmsProductVo product, List<WmsProductBom> bomList, WmsSalesScriptGeneratorBo bo) {
String prompt = buildPrompt(product, bomList, bo);
private String callAiApi(WmsProductVo product, WmsSalesScriptGeneratorBo bo) {
String prompt = buildPrompt(product, bo);
Map<String, Object> requestBody = new HashMap<>();
requestBody.put("model", deepseekConfig.getModelName());
@@ -239,7 +234,7 @@ public class WmsSalesScriptGeneratorServiceImpl implements IWmsSalesScriptGenera
/**
* 构建提示词
*/
private String buildPrompt(WmsProductVo product, List<WmsProductBom> bomList, WmsSalesScriptGeneratorBo bo) {
private String buildPrompt(WmsProductVo product, WmsSalesScriptGeneratorBo bo) {
StringBuilder prompt = new StringBuilder();
prompt.append("请根据以下产品信息和BOM清单生成")
.append(bo.getScriptCount())
@@ -264,14 +259,14 @@ public class WmsSalesScriptGeneratorServiceImpl implements IWmsSalesScriptGenera
prompt.append("备注:").append(product.getRemark()).append("\n");
}
// BOM信息
if (Boolean.TRUE.equals(bo.getIncludeBomInfo()) && bomList != null && !bomList.isEmpty()) {
prompt.append("\n【BOM清单】\n");
for (WmsProductBom bom : bomList) {
prompt.append("- ").append(bom.getRawMaterialId())
.append(": ").append(bom.getQuantity())
.append(" ").append(bom.getUnit()).append("\n");
}
}
// if (Boolean.TRUE.equals(bo.getIncludeBomInfo()) && bomList != null && !bomList.isEmpty()) {
// prompt.append("\n【BOM清单】\n");
// for (WmsProductBom bom : bomList) {
// prompt.append("- ").append(bom.getRawMaterialId())
// .append(": ").append(bom.getQuantity())
// .append(" ").append(bom.getUnit()).append("\n");
// }
// }
// 生成要求
prompt.append("\n【话术生成要求】\n");
prompt.append("1. 每条话术必须包含产品的主要特性和优势\n");