手动分配(取消分配)调整
This commit is contained in:
+36
@@ -11,6 +11,7 @@ import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.Date;
|
||||
|
||||
|
||||
/**
|
||||
@@ -386,6 +387,41 @@ public class OutMaterialDetail extends BaseVOEntity {
|
||||
@Excel(name = "单位")
|
||||
private String unit;
|
||||
|
||||
@ApiModelProperty("扩展属性1")
|
||||
@Excel(name = "扩展属性1")
|
||||
private String extAttr1;
|
||||
|
||||
@ApiModelProperty("扩展属性2")
|
||||
@Excel(name = "扩展属性2")
|
||||
private String extAttr2;
|
||||
|
||||
@ApiModelProperty("生产日期")
|
||||
@Excel(name = "生产日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date productionDate;
|
||||
|
||||
@ApiModelProperty("过期日期")
|
||||
@Excel(name = "过期日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date expiryDate;
|
||||
|
||||
@ApiModelProperty("存货日期")
|
||||
@Excel(name = "存货日期", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date inventoryDate;
|
||||
|
||||
@ApiModelProperty("扩展属性3")
|
||||
@Excel(name = "扩展属性3", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date extAttr3;
|
||||
|
||||
@ApiModelProperty("扩展属性4")
|
||||
@Excel(name = "扩展属性4", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss")
|
||||
private Date extAttr4;
|
||||
|
||||
/**
|
||||
* 库存数量(仅用于前端展示,从material_inventory表中带出)
|
||||
*/
|
||||
@ApiModelProperty("库存数量")
|
||||
@TableField(exist = false)
|
||||
private BigDecimal inventoryQuantity;
|
||||
|
||||
@TableField(exist = false)
|
||||
private BigDecimal actualQuantity;
|
||||
}
|
||||
+84
-14
@@ -377,10 +377,23 @@ public class OutMaterialDetailImpl extends ServiceImpl<OutMaterialDetailMapper,
|
||||
throw new ServiceException("物料" + outMaterialDetailDb.getMaterialName() + ",取消分配数量不能大于分配总数");
|
||||
}
|
||||
|
||||
// 更新分配数量和已分配数量(减少)
|
||||
outMaterialDetail.setAllocationQuantity(outMaterialDetailDb.getAllocationQuantity().subtract(cancelAllocationQuantity));
|
||||
outMaterialDetail.setAlreadyAllocationQuantity(outMaterialDetailDb.getAlreadyAllocationQuantity().subtract(cancelAllocationQuantity));
|
||||
// 设置 actualQuantity 用于 qxfp 方法更新库存
|
||||
// 更新分配数量和已分配数量
|
||||
// 手动取消分配的业务含义:将该明细上“已经分配”的库存全部撤回,回到可再次分配的状态
|
||||
// 因此这里直接将分配数量、已分配数量都置为 0
|
||||
outMaterialDetail.setAllocationQuantity(BigDecimal.ZERO);
|
||||
outMaterialDetail.setAlreadyAllocationQuantity(BigDecimal.ZERO);
|
||||
|
||||
// 同时清空目标库位 / 目标库区 / 目标仓库等分配相关的信息(仅保留计划信息)
|
||||
outMaterialDetail.setWarehouseId(null);
|
||||
outMaterialDetail.setWarehouseCode(null);
|
||||
outMaterialDetail.setWarehouseName(null);
|
||||
outMaterialDetail.setStorageSectionId(null);
|
||||
outMaterialDetail.setStorageCode(null);
|
||||
outMaterialDetail.setStorageName(null);
|
||||
outMaterialDetail.setStorageLocationId(null);
|
||||
outMaterialDetail.setStorageLocationCode(null);
|
||||
outMaterialDetail.setStorageLocationName(null);
|
||||
// 设置 actualQuantity 用于 qxfp 方法更新库存(表示本次实际取消的数量)
|
||||
outMaterialDetail.setActualQuantity(cancelAllocationQuantity);
|
||||
outMaterialDetailList.add(outMaterialDetail);
|
||||
|
||||
@@ -519,15 +532,52 @@ public class OutMaterialDetailImpl extends ServiceImpl<OutMaterialDetailMapper,
|
||||
}
|
||||
OutMaterialDetail outMaterialDetailChild = new OutMaterialDetail();
|
||||
outMaterialDetailChild.setMaterialDetailId(outMaterialDetailDOChild.getMaterialDetailId());
|
||||
outMaterialDetailChild.setAllocationQuantity(outMaterialDetailDOChild.getActualQuantity());
|
||||
|
||||
// 子项同样视为全部取消分配:分配数量/已分配数量扣减取消数量,并清空库位/批次等信息
|
||||
BigDecimal childCancelQty = outMaterialDetailDOChild.getActualQuantity() != null
|
||||
? outMaterialDetailDOChild.getActualQuantity()
|
||||
: BigDecimal.ZERO;
|
||||
BigDecimal childDbAllocationQty = outMaterialDetailChildDb.getAllocationQuantity() != null
|
||||
? outMaterialDetailChildDb.getAllocationQuantity()
|
||||
: BigDecimal.ZERO;
|
||||
BigDecimal childNewAllocationQty = childDbAllocationQty.subtract(childCancelQty);
|
||||
if (childNewAllocationQty.compareTo(BigDecimal.ZERO) < 0) {
|
||||
throw new ServiceException("物料" + outMaterialDetailChildDb.getMaterialName() + " 子项,取消分配数量不能大于分配总数");
|
||||
}
|
||||
outMaterialDetailChild.setAllocationQuantity(childNewAllocationQty);
|
||||
BigDecimal childDbAlreadyAlloc = outMaterialDetailChildDb.getAlreadyAllocationQuantity() != null
|
||||
? outMaterialDetailChildDb.getAlreadyAllocationQuantity()
|
||||
: BigDecimal.ZERO;
|
||||
outMaterialDetailChild.setAlreadyAllocationQuantity(childDbAlreadyAlloc.subtract(childCancelQty));
|
||||
|
||||
// 清空子项的目标库位/库区/仓库及批次相关信息
|
||||
outMaterialDetailChild.setWarehouseId(null);
|
||||
outMaterialDetailChild.setWarehouseCode(null);
|
||||
outMaterialDetailChild.setWarehouseName(null);
|
||||
outMaterialDetailChild.setStorageSectionId(null);
|
||||
outMaterialDetailChild.setStorageCode(null);
|
||||
outMaterialDetailChild.setStorageName(null);
|
||||
outMaterialDetailChild.setStorageLocationId(null);
|
||||
outMaterialDetailChild.setStorageLocationCode(null);
|
||||
outMaterialDetailChild.setStorageLocationName(null);
|
||||
outMaterialDetailChild.setMaterialInventoryId(null);
|
||||
outMaterialDetailChild.setBatchNumber(null);
|
||||
outMaterialDetailChild.setMaterialStatusCode(null);
|
||||
outMaterialDetailChild.setMaterialStatusName(null);
|
||||
outMaterialDetailChild.setContainerId(null);
|
||||
outMaterialDetailChild.setContainerCode(null);
|
||||
outMaterialDetailChild.setContainerType(null);
|
||||
outMaterialDetailChild.setContainerTypeName(null);
|
||||
|
||||
outMaterialDetailChild.setUpdateBy(loginUser.getUserid());
|
||||
outMaterialDetailChild.setUpdateByName(loginUser.getUsername());
|
||||
outMaterialDetailChild.setUpdateTime(new Date());
|
||||
outMaterialDetailChild.setAllowModify(1);
|
||||
outMaterialDetailChild.setActualQuantity(childCancelQty);
|
||||
outMaterialDetailList.add(outMaterialDetailChild);
|
||||
materialDetailIdsByUpdate.add(outMaterialDetailDOChild.getMaterialDetailId());
|
||||
allocationQuantity = allocationQuantity.add(outMaterialDetailDO.getActualQuantity());
|
||||
alreadyAllocationQuantity = alreadyAllocationQuantity.add(outMaterialDetailDO.getAlreadyAllocationQuantity());
|
||||
allocationQuantity = allocationQuantity.add(childCancelQty);
|
||||
alreadyAllocationQuantity = alreadyAllocationQuantity.add(childCancelQty);
|
||||
}
|
||||
}
|
||||
//判断取消分配数量不能大于已分配数量(取消分配应该检查alreadyAllocationQuantity,而不是allocationQuantity)
|
||||
@@ -537,17 +587,37 @@ public class OutMaterialDetailImpl extends ServiceImpl<OutMaterialDetailMapper,
|
||||
if(allocationQuantity.compareTo(dbAlreadyAllocationQuantity) > 0){
|
||||
throw new ServiceException("物料" + outMaterialDetailDb.getMaterialName() + ",取消分配数量不能大于已分配数量");
|
||||
}
|
||||
// 取消分配:只减少已分配数量,分配数量保持不变
|
||||
// 取消分配的目的是:把之前分配给库存的分配给取消掉,让库存可以重新分配
|
||||
// allocation_quantity(分配数量)不应该减少,因为取消分配后可以重新分配
|
||||
// already_allocation_quantity(已分配数量)应该减少,表示取消了多少已分配的数量
|
||||
BigDecimal dbAllocationQuantity = outMaterialDetailDb.getAllocationQuantity() != null
|
||||
? outMaterialDetailDb.getAllocationQuantity()
|
||||
: BigDecimal.ZERO;
|
||||
// 分配数量保持不变(取消分配后可以重新分配)
|
||||
outMaterialDetail.setAllocationQuantity(dbAllocationQuantity);
|
||||
// 已分配数量减少(取消已分配的数量)
|
||||
// 分配数量和已分配数量都减少:本次手动取消分配视为“把这条明细已分配的全部撤回”
|
||||
BigDecimal newAllocationQuantity = dbAllocationQuantity.subtract(allocationQuantity);
|
||||
if (newAllocationQuantity.compareTo(BigDecimal.ZERO) < 0) {
|
||||
throw new ServiceException("物料" + outMaterialDetailDb.getMaterialName() + ",取消分配数量不能大于分配总数");
|
||||
}
|
||||
outMaterialDetail.setAllocationQuantity(newAllocationQuantity);
|
||||
outMaterialDetail.setAlreadyAllocationQuantity(dbAlreadyAllocationQuantity.subtract(allocationQuantity));
|
||||
|
||||
// 同时清空该明细的目标仓库/库区/库位信息(回到未分配状态)
|
||||
outMaterialDetail.setWarehouseId(null);
|
||||
outMaterialDetail.setWarehouseCode(null);
|
||||
outMaterialDetail.setWarehouseName(null);
|
||||
outMaterialDetail.setStorageSectionId(null);
|
||||
outMaterialDetail.setStorageCode(null);
|
||||
outMaterialDetail.setStorageName(null);
|
||||
outMaterialDetail.setStorageLocationId(null);
|
||||
outMaterialDetail.setStorageLocationCode(null);
|
||||
outMaterialDetail.setStorageLocationName(null);
|
||||
|
||||
// 清空与分配库存相关的批次、容器信息
|
||||
outMaterialDetail.setMaterialInventoryId(null);
|
||||
outMaterialDetail.setBatchNumber(null);
|
||||
outMaterialDetail.setMaterialStatusCode(null);
|
||||
outMaterialDetail.setMaterialStatusName(null);
|
||||
outMaterialDetail.setContainerId(null);
|
||||
outMaterialDetail.setContainerCode(null);
|
||||
outMaterialDetail.setContainerType(null);
|
||||
outMaterialDetail.setContainerTypeName(null);
|
||||
// 设置 actualQuantity 用于 qxfp 方法更新库存(取消分配的数量)
|
||||
outMaterialDetail.setActualQuantity(allocationQuantity);
|
||||
outMaterialDetailList.add(outMaterialDetail);
|
||||
|
||||
+3
@@ -168,6 +168,9 @@ public class OutMaterialDetailPO extends StockOutOrderBaseDO {
|
||||
@Excel(name = "容器类型名称 数据字典")
|
||||
private String containerTypeName;
|
||||
|
||||
@ApiModelProperty("库存数量(仅展示)")
|
||||
private BigDecimal inventoryQuantity;
|
||||
|
||||
@ApiModelProperty("分配仓库id")
|
||||
private Long warehouseId;
|
||||
|
||||
|
||||
+3
@@ -158,6 +158,9 @@ public class OutMaterialDetailDO extends BaseVOEntity {
|
||||
@Excel(name = "容器类型名称 数据字典")
|
||||
private String containerTypeName;
|
||||
|
||||
@ApiModelProperty("库存数量(仅展示)")
|
||||
private BigDecimal inventoryQuantity;
|
||||
|
||||
@ApiModelProperty("分配仓库id")
|
||||
private Long warehouseId;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user