feat(wms): 更新采购订单状态逻辑

- 在 WmsInstockRecordServiceImpl 中添加 updatePurchaseOrderStatus 方法
- 该方法根据采购订单的总采购数量与已入库数量对比来判断订单状态
- 更新 WmsInstockRecord 和 WmsPurchaseOrder 相关字段
- 优化 WmsPurchaseOrderServiceImpl 中的 insertByBo 方法,明确订单状态初始化
master
zangch@mesnac.com 4 months ago
parent 0901fb1177
commit 2e58e35bab

@ -132,4 +132,5 @@ public class WmsInstockPrint{
private String materialCategoryName;//字段映射
}

@ -99,4 +99,17 @@ public class WmsInstockRecord extends TenantEntity {
@TableField(exist = false)
private String materialCategoryName;//字段映射
/**
*
*/
@TableField(exist = false)
private String userName;
/**
*
*/
@TableField(exist = false)
private String nickName;
}

@ -137,4 +137,10 @@ public class WmsInstockPrintVo implements Serializable {
*/
private String materialCategoryName;//字段映射
/**
*
*/
private Date createTime;
}

@ -124,4 +124,14 @@ public class WmsInstockRecordVo implements Serializable {
*/
private String materialCategoryName;//字段映射
/**
*
*/
private String userName;
/**
*
*/
private String nickName;
}

@ -11,16 +11,21 @@ import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.wms.domain.BaseMaterialCategory;
import org.dromara.wms.domain.SysUser;
import org.dromara.wms.domain.WmsInstockOrder;
import org.dromara.wms.domain.WmsInstockRecord;
import org.dromara.wms.domain.bo.WmsInstockOrderBo;
import org.dromara.wms.domain.bo.WmsInstockPrintBo;
import org.dromara.wms.domain.bo.WmsInstockRecordBo;
import org.dromara.wms.domain.bo.WmsInventoryBo;
import org.dromara.wms.domain.bo.WmsPurchaseOrderBo;
import org.dromara.wms.domain.bo.WmsPurchaseOrderDetailBo;
import org.dromara.wms.domain.vo.WmsInstockOrderVo;
import org.dromara.wms.domain.vo.WmsInstockPrintVo;
import org.dromara.wms.domain.vo.WmsInstockRecordVo;
import org.dromara.wms.domain.vo.WmsInventoryVo;
import org.dromara.wms.domain.vo.WmsPurchaseOrderVo;
import org.dromara.wms.domain.vo.WmsPurchaseOrderDetailVo;
import org.dromara.wms.mapper.WmsInstockOrderMapper;
import org.dromara.wms.mapper.WmsInstockRecordMapper;
import org.dromara.wms.service.*;
@ -51,6 +56,8 @@ public class WmsInstockRecordServiceImpl implements IWmsInstockRecordService {
private final IWmsInstockDetailService instockDetailService;
private final IWmsInstockPrintService instockPrintService;
private final IWmsPurchaseOrderService purchaseOrderService;
private final IWmsPurchaseOrderDetailService purchaseOrderDetailService;
/**
@ -98,6 +105,9 @@ public class WmsInstockRecordServiceImpl implements IWmsInstockRecordService {
// 关联表查询物料大类名称
.select(BaseMaterialCategory::getMaterialCategoryName)
.leftJoin(BaseMaterialCategory.class, BaseMaterialCategory::getMaterialCategoryId, WmsInstockRecord::getMaterialCategoryId)
//关联查询创建人(入库人)
.select(SysUser::getUserName, SysUser::getNickName)
.leftJoin(SysUser.class,SysUser::getUserId, WmsInstockRecord::getCreateBy)
.eq(StringUtils.isNotBlank(bo.getInstockCode()), WmsInstockRecord::getInstockCode, bo.getInstockCode())
@ -254,7 +264,107 @@ public class WmsInstockRecordServiceImpl implements IWmsInstockRecordService {
inventoryService.updateByBo(update);
}
}
// 更新采购订单状态
updatePurchaseOrderStatus(order.getOrderNo());
return true;
}
/**
*
*
* 1-2-3-
*
* @param orderNo
*/
private void updatePurchaseOrderStatus(String orderNo) {
// 如果订单编号为空,则不是采购订单入库,直接返回
if (StringUtils.isBlank(orderNo)) {
return;
}
try {
// 查询采购订单信息
WmsPurchaseOrderBo purchaseOrderQuery = new WmsPurchaseOrderBo();
purchaseOrderQuery.setPoNo(orderNo);
List<WmsPurchaseOrderVo> purchaseOrders = purchaseOrderService.queryList(purchaseOrderQuery);
if (purchaseOrders.isEmpty()) {
// 如果没有找到对应的采购订单,可能是其他类型的入库单,直接返回
return;
}
WmsPurchaseOrderVo purchaseOrder = purchaseOrders.get(0);
// 查询采购订单明细,获取总采购数量
WmsPurchaseOrderDetailBo detailQuery = new WmsPurchaseOrderDetailBo();
detailQuery.setPoNo(orderNo);
List<WmsPurchaseOrderDetailVo> purchaseDetails = purchaseOrderDetailService.queryList(detailQuery);
if (purchaseDetails.isEmpty()) {
return;
}
// 计算总采购数量和已入库数量
BigDecimal totalPurchaseQty = BigDecimal.ZERO;
BigDecimal totalInstockedQty = BigDecimal.ZERO;
for (WmsPurchaseOrderDetailVo detail : purchaseDetails) {
// 累计总采购数量
if (detail.getPurchaseQty() != null) {
totalPurchaseQty = totalPurchaseQty.add(detail.getPurchaseQty());
}
// 查询该物料的已入库数量
WmsInstockRecordBo recordQuery = new WmsInstockRecordBo();
recordQuery.setMaterialCode(detail.getMaterialCode());
List<WmsInstockRecordVo> instockRecords = this.queryList(recordQuery);
for (WmsInstockRecordVo record : instockRecords) {
// 只统计来自当前采购订单的入库记录
// 通过查询入库单的订单编号来确认是否来自当前采购订单
WmsInstockOrderBo instockOrderQuery = new WmsInstockOrderBo();
instockOrderQuery.setInstockCode(record.getInstockCode());
MPJLambdaWrapper<WmsInstockOrder> wrapper = JoinWrappers.lambda(WmsInstockOrder.class)
.selectAll(WmsInstockOrder.class)
.eq(StringUtils.isNotBlank(instockOrderQuery.getInstockCode()), WmsInstockOrder::getInstockCode, instockOrderQuery.getInstockCode());
List<WmsInstockOrderVo> instockOrders = instockOrderMapper.selectVoList(wrapper);
if (!instockOrders.isEmpty() && orderNo.equals(instockOrders.get(0).getOrderNo())) {
if (record.getInstockQty() != null) {
totalInstockedQty = totalInstockedQty.add(BigDecimal.valueOf(record.getInstockQty()));
}
}
}
}
// 根据入库完成情况判断订单状态
String newStatus;
if (totalInstockedQty.compareTo(BigDecimal.ZERO) == 0) {
// 如果还没有入库,保持原状态或设为待采购
newStatus = "1"; // 待采购
} else if (totalInstockedQty.compareTo(totalPurchaseQty) >= 0) {
// 如果已入库数量大于等于采购数量,订单完成
newStatus = "3"; // 订单完成
} else {
// 如果已入库数量小于采购数量,部分到货
newStatus = "2"; // 部分到货
}
// 如果状态发生变化,更新采购订单状态
if (!newStatus.equals(purchaseOrder.getPoStatus())) {
WmsPurchaseOrderBo updateBo = new WmsPurchaseOrderBo();
updateBo.setPoId(purchaseOrder.getPoId());
updateBo.setPoStatus(newStatus);
purchaseOrderService.updateByBo(updateBo);
}
} catch (Exception e) {
// 记录错误但不影响主流程
// 可以考虑添加日志记录
// log.error("更新采购订单状态失败: {}", e.getMessage(), e);
}
}
}

@ -13,7 +13,6 @@ import org.dromara.common.satoken.utils.LoginHelper;
import org.dromara.wms.domain.BaseMaterialCategory;
import org.dromara.wms.domain.BaseSupplierInfo;
import org.dromara.wms.domain.WmsPurchaseOrder;
import org.dromara.wms.domain.WmsPurchaseOrderDetail;
import org.dromara.wms.domain.bo.WmsPurchaseOrderBo;
import org.dromara.wms.domain.bo.WmsPurchaseOrderDetailBo;
import org.dromara.wms.domain.vo.WmsPurchaseOrderVo;
@ -124,7 +123,7 @@ public class WmsPurchaseOrderServiceImpl implements IWmsPurchaseOrderService {
@Override
public WmsPurchaseOrder insertByBo(WmsPurchaseOrderBo bo) {
// String username = LoginHelper.getUsername();
bo.setPoStatus("1");
bo.setPoStatus("1");//订单状态(1待采购2部分到货3订单完成)
WmsPurchaseOrder add = MapstructUtils.convert(bo, WmsPurchaseOrder.class);
validEntityBeforeSave(add);
if (StringUtils.isEmpty(bo.getPoNo())) {

Loading…
Cancel
Save