feat(transfer): 添加调拨单审批功能和调拨类型字段
- 在WmsTransferOrder实体中添加调拨类型、审批人、审批时间和审批状态字段 - 在WmsMaterialCoil实体中添加调拨类型字段用于关联调拨信息 - 实现调拨单审批接口,支持通过或驳回操作 - 更新调拨单明细处理逻辑,确保调拨类型正确传递到钢卷信息 - 添加调拨单取消功能,可恢复调拨前的状态 - 在导出VO中增加调拨类型字段支持Excel导出 - 更新查询条件支持按调拨类型、审批状态等字段筛选 - 完善调拨流程中的数据验证和错误处理机制
This commit is contained in:
@@ -6,6 +6,7 @@ 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.*;
|
||||
import com.klp.domain.bo.WmsMaterialCoilBo;
|
||||
import com.klp.domain.vo.WmsMaterialCoilVo;
|
||||
@@ -40,6 +41,7 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
|
||||
private final IWmsMaterialCoilService coilService;
|
||||
private final IWmsWarehouseService warehouseService;
|
||||
private final WmsWarehouseMapper warehouseMapper;
|
||||
private final WmsTransferOrderMapper wmsTransferOrderMapper;
|
||||
|
||||
/**
|
||||
* 查询调拨单明细
|
||||
@@ -509,50 +511,70 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
|
||||
Long orderItemId = bo.getOrderItemId();
|
||||
Long coilId = bo.getCoilId();
|
||||
Long itemId = bo.getItemIdAfter();
|
||||
String itemType = bo.getMaterialTypeAfter() != null ? (bo.getMaterialTypeAfter() == 1 ? "raw_material" : "product") : null;
|
||||
Long warehouseId = bo.getWarehouseIdAfter();
|
||||
|
||||
if (coilId == null) {
|
||||
throw new IllegalArgumentException("coilId不能为空");
|
||||
}
|
||||
|
||||
// 查询钢卷
|
||||
WmsMaterialCoil coil = coilMapper.selectById(coilId);
|
||||
if (coil == null) {
|
||||
throw new IllegalArgumentException("钢卷不存在");
|
||||
}
|
||||
|
||||
// 如果传了才修改钢卷
|
||||
if (itemId != null) {
|
||||
coil.setItemId(itemId);
|
||||
}
|
||||
if (itemType != null) {
|
||||
coil.setItemType(itemType);
|
||||
coil.setMaterialType(bo.getMaterialTypeAfter() == 1 ? "原料" : "成品");
|
||||
}
|
||||
if (warehouseId != null) {
|
||||
coil.setWarehouseId(warehouseId);
|
||||
}
|
||||
coilMapper.updateById(coil);
|
||||
|
||||
// 查询调拨明细
|
||||
LambdaQueryWrapper<WmsTransferOrderItem> wrapper = new LambdaQueryWrapper<>();
|
||||
wrapper.eq(true, WmsTransferOrderItem::getCoilId, coilId);
|
||||
wrapper.eq(orderItemId != null, WmsTransferOrderItem::getOrderItemId, orderItemId);
|
||||
wrapper.eq(transferId != null, WmsTransferOrderItem::getTransferId, transferId);
|
||||
WmsTransferOrderItem item = baseMapper.selectOne(wrapper);
|
||||
if (item != null) {
|
||||
// 如果没传itemIdAfter则用itemIdBefore的值
|
||||
item.setItemIdAfter(itemId != null ? itemId : item.getItemIdBefore());
|
||||
// 如果没传materialTypeAfter则用materialTypeBefore的值
|
||||
if (bo.getMaterialTypeAfter() != null) {
|
||||
item.setMaterialTypeAfter(bo.getMaterialTypeAfter());
|
||||
} else {
|
||||
item.setMaterialTypeAfter(item.getMaterialTypeBefore());
|
||||
}
|
||||
// 如果没传warehouseIdAfter则用warehouseIdBefore的值
|
||||
item.setWarehouseIdAfter(warehouseId != null ? warehouseId : item.getWarehouseIdBefore());
|
||||
baseMapper.updateById(item);
|
||||
if (item == null) {
|
||||
throw new IllegalArgumentException("调拨明细不存在");
|
||||
}
|
||||
|
||||
// 确定最终值:如果没传则使用改之前的值
|
||||
Long finalItemId = itemId != null ? itemId : item.getItemIdBefore();
|
||||
Long finalMaterialType = bo.getMaterialTypeAfter() != null ? bo.getMaterialTypeAfter() : item.getMaterialTypeBefore();
|
||||
Long finalWarehouseId = warehouseId != null ? warehouseId : item.getWarehouseIdBefore();
|
||||
String finalItemType = finalMaterialType == 1 ? "raw_material" : "product";
|
||||
|
||||
// 先校验itemId是否存在(根据itemType)
|
||||
if (finalItemId != null && StringUtils.isNotBlank(finalItemType)) {
|
||||
if ("raw_material".equals(finalItemType)) {
|
||||
WmsRawMaterial rawMaterial = rawMaterialMapper.selectById(finalItemId);
|
||||
if (rawMaterial == null) {
|
||||
throw new RuntimeException("原材料不存在,ID: " + finalItemId);
|
||||
}
|
||||
} else {
|
||||
WmsProduct product = productMapper.selectById(finalItemId);
|
||||
if (product == null) {
|
||||
throw new RuntimeException("产品不存在,ID: " + finalItemId);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 更新调拨明细
|
||||
item.setItemIdAfter(finalItemId);
|
||||
item.setMaterialTypeAfter(finalMaterialType);
|
||||
item.setWarehouseIdAfter(finalWarehouseId);
|
||||
baseMapper.updateById(item);
|
||||
|
||||
// 更新钢卷信息
|
||||
coil.setItemId(finalItemId);
|
||||
coil.setItemType(finalItemType);
|
||||
coil.setMaterialType(finalMaterialType == 1 ? "原料" : "成品");
|
||||
coil.setWarehouseId(finalWarehouseId);
|
||||
|
||||
// 设置调拨类型
|
||||
if (item.getTransferId() != null) {
|
||||
WmsTransferOrder wmsTransferOrder = wmsTransferOrderMapper.selectById(item.getTransferId());
|
||||
if (wmsTransferOrder != null) {
|
||||
coil.setTransferType(wmsTransferOrder.getTransferType());
|
||||
}
|
||||
}
|
||||
coilMapper.updateById(coil);
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -562,26 +584,43 @@ public class WmsTransferOrderItemServiceImpl implements IWmsTransferOrderItemSer
|
||||
@Override
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public Boolean cancelTransfer(Long orderItemId) {
|
||||
// 查询调拨明细
|
||||
WmsTransferOrderItem item = baseMapper.selectById(orderItemId);
|
||||
if (item == null) {
|
||||
throw new IllegalArgumentException("明细记录不存在");
|
||||
}
|
||||
|
||||
Long coilId = item.getCoilId();
|
||||
if (coilId == null) {
|
||||
throw new IllegalArgumentException("钢卷ID不能为空");
|
||||
}
|
||||
|
||||
// 查询钢卷
|
||||
WmsMaterialCoil coil = coilMapper.selectById(coilId);
|
||||
if (coil == null) {
|
||||
throw new IllegalArgumentException("钢卷不存在");
|
||||
}
|
||||
|
||||
// 恢复到调拨前的状态
|
||||
Long originalItemId = item.getItemIdBefore();
|
||||
Long originalMaterialType = item.getMaterialTypeBefore();
|
||||
Long originalWarehouseId = item.getWarehouseIdBefore();
|
||||
|
||||
WmsMaterialCoil coil = coilMapper.selectById(coilId);
|
||||
if (coil != null) {
|
||||
if (originalItemId != null && originalMaterialType != null) {
|
||||
coil.setItemId(originalItemId);
|
||||
coil.setItemType(originalMaterialType == 1 ? "raw_material" : "product");
|
||||
coil.setMaterialType(originalMaterialType == 1 ? "原料" : "成品");
|
||||
coil.setWarehouseId(originalWarehouseId);
|
||||
coilMapper.updateById(coil);
|
||||
}
|
||||
if (originalWarehouseId != null) {
|
||||
coil.setWarehouseId(originalWarehouseId);
|
||||
}
|
||||
// 清空调拨类型
|
||||
coil.setTransferType(null);
|
||||
coilMapper.updateById(coil);
|
||||
|
||||
// 逻辑删除调拨明细记录(使用MyBatis-Plus的逻辑删除)
|
||||
baseMapper.deleteById(orderItemId);
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user