|
|
|
|
@ -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);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|