@ -92,7 +92,6 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
@Override
public int insertWmsMove ( WmsMove wmsMove ) {
int rows = wmsMoveMapper . insertWmsMove ( wmsMove ) ;
insertWmsMoveDetail ( wmsMove ) ;
return rows ;
}
@ -105,8 +104,6 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
@Transactional
@Override
public int updateWmsMove ( WmsMove wmsMove ) {
wmsMoveMapper . deleteWmsMoveDetailByMoveId ( wmsMove . getMoveId ( ) ) ;
insertWmsMoveDetail ( wmsMove ) ;
return wmsMoveMapper . updateWmsMove ( wmsMove ) ;
}
@ -119,7 +116,6 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
@Transactional
@Override
public int deleteWmsMoveByMoveIds ( Long [ ] moveIds ) {
wmsMoveMapper . deleteWmsMoveDetailByMoveIds ( moveIds ) ;
return wmsMoveMapper . deleteWmsMoveByMoveIds ( moveIds ) ;
}
@ -132,30 +128,9 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
@Transactional
@Override
public int deleteWmsMoveByMoveId ( Long moveId ) {
wmsMoveMapper . deleteWmsMoveDetailByMoveId ( moveId ) ;
return wmsMoveMapper . deleteWmsMoveByMoveId ( moveId ) ;
}
/ * *
* 新 增 移 库 合 库 记 录 明 细 ; 原 材 料 入 库 记 录 对 应 的 明 细 信 息 信 息
*
* @param wmsMove 移 库 合 库 记 录 对 象
* /
public void insertWmsMoveDetail ( WmsMove wmsMove ) {
List < WmsMoveDetail > wmsMoveDetailList = wmsMove . getWmsMoveDetailList ( ) ;
Long moveId = wmsMove . getMoveId ( ) ;
if ( StringUtils . isNotNull ( wmsMoveDetailList ) ) {
List < WmsMoveDetail > list = new ArrayList < WmsMoveDetail > ( ) ;
for ( WmsMoveDetail wmsMoveDetail : wmsMoveDetailList ) {
wmsMoveDetail . setMoveId ( moveId ) ;
list . add ( wmsMoveDetail ) ;
}
if ( list . size ( ) > 0 ) {
wmsMoveMapper . batchWmsMoveDetail ( list ) ;
}
}
}
/ * *
* 查 询 移 库 合 库 记 录 列 表 , Join warehouse , group
@ -214,9 +189,29 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
}
String warehouseInstockType = baseWareHouse . getWarehouseInstockType ( ) ;
List < WmsMove > toInsertedMoves = new ArrayList < > ( ) ;
Date currentDate = new Date ( ) ;
String userName = SecurityUtils . getUsername ( ) ;
WmsMove wmsMove = new WmsMove ( ) ;
String taskCode = Seq . getId ( Seq . wmsMoveSeqType , Seq . wmsMoveSeqCode ) ;
wmsMove . setTaskCode ( taskCode ) ;
wmsMove . setWarehouseId ( oriLocation . getWarehouseId ( ) ) ;
wmsMove . setOriLocationCode ( wmsMoveApplyVo . getOriLocationCode ( ) ) ;
wmsMove . setTargetLocationCode ( wmsMoveApplyVo . getTargetLocationCode ( ) ) ;
wmsMove . setExecuteStatus ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_TOEXECUTE ) ;
wmsMove . setOperationType ( WmsConstants . WMS_OPERATION_TYPE_MANUAL ) ;
wmsMove . setMoveWay ( WmsConstants . WMS_MOVEMERGE_WAY_MANUAL ) ;
wmsMove . setMoveType ( wmsMoveApplyVo . getMoveType ( ) ) ;
wmsMove . setAuditStatus ( WmsConstants . WMS_AUDIT_STATUS_PASS ) ;
wmsMove . setExecuteStatus ( WmsConstants . WMS_EXECUTE_STATUS_TOEXECUTE ) ;
wmsMove . setApplyBy ( userName ) ;
wmsMove . setApplyDate ( currentDate ) ;
wmsMoveMapper . insertWmsMove ( wmsMove ) ;
List < WmsMoveDetail > toInsertedMoveDetails = new ArrayList < > ( ) ;
if ( warehouseInstockType . equals ( WmsConstants . WMS_WAREHOUSE_INSTOCK_TYPE_RAW ) ) { //如果是原材料
WmsRawStock queryRawStock = new WmsRawStock ( ) ;
queryRawStock . setLocationCode ( oriLocationCode ) ;
@ -246,7 +241,7 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
}
}
toInsertedMove s = getMove sByRawStocks( wmsRawStocks , wmsMove ApplyVo , userName , currentDate ) ;
toInsertedMove Detail s = getMove Detail sByRawStocks( wmsRawStocks , wmsMove , userName , currentDate ) ;
} else { //如果是成品
WmsProductStock queryProductStock = new WmsProductStock ( ) ;
queryProductStock . setLocationCode ( oriLocationCode ) ;
@ -269,7 +264,7 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
throw new ServiceException ( "目标库位有库存,不能进行移库" ) ;
}
toInsertedMove s = getMove sByProductStocks( productStocks , wmsMove ApplyVo , userName , currentDate ) ;
toInsertedMove Detail s = getMove Detail sByProductStocks( productStocks , wmsMove , userName , currentDate ) ;
}
oriLocation . setLocationStatus ( WmsConstants . WMS_BASE_LOCATION_STATUS_MOVE_LOCK ) ;
@ -282,63 +277,46 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
targetLocation . setUpdateBy ( userName ) ;
wmsBaseLocationMapper . updateWmsBaseLocation ( targetLocation ) ;
int rows = wmsMoveMapper . batchWmsMove ( toInsertedMove s) ;
int rows = wmsMoveMapper . batchWmsMove Detail ( toInsertedMove Detail s) ;
return rows ;
}
private List < WmsMove > getMove sByRawStocks( List < WmsRawStock > wmsRawStocks , WmsMove ApplyVo wmsMove ApplyVo ,
private List < WmsMove Detail > getMove Detail sByRawStocks( List < WmsRawStock > wmsRawStocks , WmsMove wmsMove ,
String userName , Date currentDate ) {
List < WmsMove > wmsMoveList = new ArrayList < > ( ) ;
String taskCode = Seq . getId ( Seq . wmsMoveSeqType , Seq . wmsMoveSeqCode ) ;
wmsRawStocks . forEach ( wmsRawStock - > {
WmsMove wmsMove = new WmsMove ( ) ;
wmsMove . setInstockBatch ( wmsRawStock . getInstockBatch ( ) ) ; //物料条码
wmsMove . setMaterialId ( wmsRawStock . getMaterialId ( ) ) ;
wmsMove . setWarehouseId ( wmsRawStock . getWarehouseId ( ) ) ;
wmsMove . setOriLocationCode ( wmsMoveApplyVo . getOriLocationCode ( ) ) ;
wmsMove . setTargetLocationCode ( wmsMoveApplyVo . getTargetLocationCode ( ) ) ;
wmsMove . setPlanAmount ( wmsRawStock . getTotalAmount ( ) ) ;
wmsMove . setExecuteStatus ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_TOEXECUTE ) ;
wmsMove . setTaskCode ( taskCode ) ;
wmsMove . setOperationType ( WmsConstants . WMS_OPERATION_TYPE_MANUAL ) ;
wmsMove . setMoveWay ( WmsConstants . WMS_MOVEMERGE_WAY_MANUAL ) ;
wmsMove . setMoveType ( wmsMoveApplyVo . getMoveType ( ) ) ;
wmsMove . setAuditStatus ( WmsConstants . WMS_AUDIT_STATUS_PASS ) ;
wmsMove . setExecuteStatus ( WmsConstants . WMS_EXECUTE_STATUS_TOEXECUTE ) ;
wmsMove . setApplyBy ( userName ) ;
wmsMove . setApplyDate ( currentDate ) ;
List < WmsMoveDetail > wmsMoveDetailList = new ArrayList < > ( ) ;
wmsMoveList . add ( wmsMove ) ;
wmsRawStocks . forEach ( wmsRawStock - > {
WmsMoveDetail wmsMoveDetail = new WmsMoveDetail ( ) ;
wmsMoveDetail . setMoveId ( wmsMove . getMoveId ( ) ) ;
wmsMoveDetail . setInstockBatch ( wmsRawStock . getInstockBatch ( ) ) ; //物料条码
wmsMoveDetail . setMaterialId ( wmsRawStock . getMaterialId ( ) ) ;
wmsMoveDetail . setPlanAmount ( wmsRawStock . getTotalAmount ( ) ) ;
wmsMoveDetail . setExecuteStatus ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_TOEXECUTE ) ;
wmsMoveDetail . setCreateDate ( currentDate ) ;
wmsMoveDetail . setCreateBy ( userName ) ;
wmsMoveDetailList . add ( wmsMoveDetail ) ;
} ) ;
return wmsMoveList ;
return wmsMoveDetailList ;
}
private List < WmsMove > getMovesByProductStocks ( List < WmsProductStock > wmsProductStocks , WmsMoveApplyVo wmsMoveApplyVo ,
private List < WmsMoveDetail > getMoveDetailsByProductStocks ( List < WmsProductStock > wmsProductStocks , WmsMove wmsMove ,
String userName , Date currentDate ) {
List < WmsMove > wmsMoveList = new ArrayList < > ( ) ;
String taskCode = Seq . getId ( Seq . wmsMoveSeqType , Seq . wmsMoveSeqCode ) ;
List < WmsMoveDetail > wmsMoveDetailList = new ArrayList < > ( ) ;
wmsProductStocks . forEach ( wmsProductStock - > {
WmsMove wmsMove = new WmsMove ( ) ;
wmsMove . setInstockBatch ( wmsProductStock . getProductBatch ( ) ) ;
wmsMove . setWarehouseId ( wmsProductStock . getWarehouseId ( ) ) ;
wmsMove . setOriLocationCode ( wmsMoveApplyVo . getOriLocationCode ( ) ) ;
wmsMove . setTargetLocationCode ( wmsMoveApplyVo . getTargetLocationCode ( ) ) ;
wmsMove . setMaterialId ( wmsProductStock . getProductId ( ) ) ;
wmsMove . setPlanAmount ( wmsProductStock . getTotalAmount ( ) ) ;
wmsMove . setExecuteStatus ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_TOEXECUTE ) ;
wmsMove . setTaskCode ( taskCode ) ;
wmsMove . setOperationType ( WmsConstants . WMS_OPERATION_TYPE_MANUAL ) ;
wmsMove . setMoveWay ( WmsConstants . WMS_MOVEMERGE_WAY_MANUAL ) ;
wmsMove . setMoveType ( wmsMoveApplyVo . getMoveType ( ) ) ;
wmsMove . setAuditStatus ( WmsConstants . WMS_AUDIT_STATUS_PASS ) ;
wmsMove . setExecuteStatus ( WmsConstants . WMS_EXECUTE_STATUS_TOEXECUTE ) ;
wmsMove . setApplyBy ( userName ) ;
wmsMove . setApplyDate ( currentDate ) ;
WmsMoveDetail wmsMoveDetail = new WmsMoveDetail ( ) ;
wmsMoveDetail . setMoveId ( wmsMove . getMoveId ( ) ) ;
wmsMoveDetail . setInstockBatch ( wmsProductStock . getProductBatch ( ) ) ; //物料条码
wmsMoveDetail . setMaterialId ( wmsProductStock . getProductId ( ) ) ;
wmsMoveDetail . setPlanAmount ( wmsProductStock . getTotalAmount ( ) ) ;
wmsMoveDetail . setExecuteStatus ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_TOEXECUTE ) ;
wmsMoveDetail . setCreateDate ( currentDate ) ;
wmsMoveDetail . setCreateBy ( userName ) ;
wmsMove List. add ( wmsMove ) ;
wmsMoveDetailList . add ( wmsMoveDetail ) ;
} ) ;
return wmsMove List;
return wmsMoveDetailList ;
}
@ -354,14 +332,44 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
}
public void batchInsertMoveDetails ( List < WmsMoveDetail > wmsMoveDetailList , Long moveId , String userName , Date currentDate ) {
wmsMoveDetailList . forEach ( moveDetail - > {
moveDetail . setMoveId ( moveId ) ;
moveDetail . setCreateBy ( userName ) ;
moveDetail . setCreateDate ( currentDate ) ;
} ) ;
wmsMoveMapper . batchWmsMoveDetail ( wmsMoveDetailList ) ;
/ * *
* 查 询 移 库 合 库 记 录 明 细 列 表 ( 兼 容 PDA 老 版 本 , 把 movedetail 的 信 息 set 到 move 中 ) , Join material , warehouse
*
* @param taskCode 任 务 编 号
* @return 移 库 合 库 记 录
* /
@Override
public List < WmsMove > selectWmsMoveJoinListByTaskCode ( String taskCode ) {
WmsMove wmsMove = wmsMoveMapper . selectWmsMoveByTaskCode ( taskCode ) ;
List < WmsMoveDetail > wmsMoveDetailList = wmsMove . getWmsMoveDetailList ( ) ;
List < WmsMove > wmsMoveList = new ArrayList < > ( ) ;
for ( WmsMoveDetail wmsMoveDetail : wmsMoveDetailList ) {
WmsMove toReturnWmsMove = new WmsMove ( ) ;
toReturnWmsMove . setTaskCode ( taskCode ) ;
toReturnWmsMove . setWarehouseName ( wmsMove . getWarehouseName ( ) ) ;
toReturnWmsMove . setOriLocationCode ( wmsMove . getOriLocationCode ( ) ) ;
toReturnWmsMove . setTargetLocationCode ( wmsMove . getTargetLocationCode ( ) ) ;
toReturnWmsMove . setInstockBatch ( wmsMoveDetail . getInstockBatch ( ) ) ;
toReturnWmsMove . setMaterialName ( wmsMoveDetail . getMaterialName ( ) ) ;
toReturnWmsMove . setPlanAmount ( wmsMoveDetail . getPlanAmount ( ) ) ;
toReturnWmsMove . setRealOutstockAmount ( wmsMoveDetail . getRealAmount ( ) ) ;
toReturnWmsMove . setRealInstockAmount ( wmsMoveDetail . getRealInstockAmount ( ) ) ;
toReturnWmsMove . setExecuteStatus ( wmsMoveDetail . getExecuteStatus ( ) ) ;
wmsMoveList . add ( toReturnWmsMove ) ;
}
return wmsMoveList ;
}
// public void batchInsertMoveDetails(List<WmsMoveDetail> wmsMoveDetailList, Long moveId, String userName, Date currentDate) {
// wmsMoveDetailList.forEach(moveDetail -> {
// moveDetail.setMoveId(moveId);
// moveDetail.setCreateBy(userName);
// moveDetail.setCreateDate(currentDate);
// });
// wmsMoveMapper.batchWmsMoveDetail(wmsMoveDetailList);
// }
/ * *
@ -413,43 +421,54 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
String userName = SecurityUtils . getUsername ( ) ;
Date currentDate = new Date ( ) ;
//先根据原库位编码找到需要移库的信息
WmsMove queryMove = new WmsMove ( ) ;
queryMove . setTaskCode ( taskCode ) ;
// queryMove.setInstockBatch(batchCode);
queryMove . setOriLocationCode ( locationCode ) ;
List < WmsMove > wmsMoveList = wmsMoveMapper . selectWmsMoveList ( queryMove ) ;
if ( wmsMoveList = = null | | wmsMoveList . isEmpty ( ) ) {
throw new ServiceException ( "没有此移库信息" ) ;
}
//从原库位所有需要移库的物料条码中find当前移库物料条码的信息
WmsMove wmsMove = wmsMoveList . stream ( ) . filter ( move - >
move . getInstockBatch ( ) . equals ( materialBarcode ) ) . findFirst ( ) . get ( ) ;
WmsMove wmsMove = wmsMoveMapper . selectWmsMoveByTaskCode ( taskCode ) ;
if ( wmsMove = = null ) {
throw new ServiceException ( "没有此移库信息" ) ;
}
if ( ! wmsMove . getOriLocationCode ( ) . equals ( locationCode ) ) {
throw new ServiceException ( "没有此移库信息" ) ;
}
String executeStatus = wmsMove . getExecuteStatus ( ) ;
if ( executeStatus . equals ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_OUTSTOCK_FINISH ) ) {
throw new ServiceException ( "此批次已移库出库完成,不能再出库" ) ;
throw new ServiceException ( "此 条码 已移库出库完成,不能再出库") ;
}
if ( executeStatus . equals ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_INSTOCK_FINISH ) ) {
throw new ServiceException ( "此 批次 已移库入库完成,不能再出库") ;
throw new ServiceException ( "此 条码 已移库入库完成,不能再出库") ;
}
BigDecimal planAmount = wmsMove . getPlanAmount ( ) ;
BigDecimal realOutstockAmount = wmsMove . getRealOutstockAmount ( ) ;
List < WmsMoveDetail > wmsMoveDetailList = wmsMove . getWmsMoveDetailList ( ) ;
if ( wmsMoveDetailList = = null | | wmsMoveDetailList . isEmpty ( ) ) {
throw new ServiceException ( "没有此移库信息" ) ;
}
WmsMoveDetail existedMoveDetail = wmsMoveDetailList . stream ( ) . filter ( move - >
move . getInstockBatch ( ) . equals ( materialBarcode ) ) . findFirst ( ) . get ( ) ;
if ( existedMoveDetail = = null ) {
throw new ServiceException ( "没有此移库信息" ) ;
}
String detailExecuteStatus = existedMoveDetail . getExecuteStatus ( ) ;
if ( detailExecuteStatus . equals ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_OUTSTOCK_FINISH ) ) {
throw new ServiceException ( "此条码已移库出库完成,不能再出库" ) ;
}
if ( detailExecuteStatus . equals ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_INSTOCK_FINISH ) ) {
throw new ServiceException ( "此条码已移库入库完成,不能再出库" ) ;
}
BigDecimal planAmount = existedMoveDetail . getPlanAmount ( ) ;
BigDecimal realOutstockAmount = existedMoveDetail . getRealAmount ( ) = = null ? BigDecimal . ZERO : existedMoveDetail . getRealAmount ( ) ;
BigDecimal updateRealOutstockAmount = realOutstockAmount . add ( applyQty ) ;
if ( updateRealOutstockAmount . compareTo ( planAmount ) > 0 ) {
throw new ServiceException ( "数量不能大于" + planAmount . subtract ( realOutstockAmount ) ) ;
if ( updateRealOutstockAmount . compareTo ( planAmount ) != 0 ) {
throw new ServiceException ( "数量 需等 于" + planAmount . subtract ( realOutstockAmount ) ) ;
}
WmsMoveDetail existedMoveDetail = wmsMoveDetailMapper . selectWmsMoveDetailByMoveIdAndBarCode ( wmsMove . getMoveId ( ) , materialBarcode ) ;
if ( existedMoveDetail ! = null ) {
throw new ServiceException ( "此物料条码已经出库,不能重复出库" ) ;
}
String barcodeType = baseBarcodeInfo . getBarcodeType ( ) ;
if ( barcodeType . equals ( MesConstants . MES_BARCODE_TYPE_RAW ) ) { //如果是原材料
@ -458,11 +477,24 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
moveOutUpdateProductStock ( locationCode , materialBarcode , applyQty , userName , currentDate ) ;
}
//插入移库合库明细记录
insertMoveDetail ( wmsMove . getMoveId ( ) , baseBarcodeInfo , applyQty , userName , currentDate ) ;
// String updatedExecuteStatus = WmsConstants.WMS_MOVE_EXECUTE_STATUS_EXECUTING;
// if (updateRealOutstockAmount.compareTo(planAmount) == 0) {
// updatedExecuteStatus = WmsConstants.WMS_MOVE_EXECUTE_STATUS_OUTSTOCK_FINISH;
// }
//更新移库合库明细记录
existedMoveDetail . setRealAmount ( updateRealOutstockAmount ) ;
existedMoveDetail . setExecuteStatus ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_OUTSTOCK_FINISH ) ;
existedMoveDetail . setExecutePerson ( userName ) ;
if ( existedMoveDetail . getExecuteTime ( ) = = null ) { //执行开始时间
existedMoveDetail . setExecuteTime ( currentDate ) ;
}
existedMoveDetail . setUpdateBy ( userName ) ;
existedMoveDetail . setUpdateDate ( currentDate ) ;
wmsMoveDetailMapper . updateWmsMoveDetail ( existedMoveDetail ) ;
//更新移库合库记录,并判断是否解锁库位
outstockUpdateWmsMove ( wmsMove , wmsMoveList , oriLocation , applyQty , userName , currentDate ) ;
outstockUpdateWmsMove ( wmsMove , existedMoveDetail, wmsMoveDetail List, oriLocation , userName , currentDate ) ;
return 1 ;
}
@ -483,6 +515,53 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
wmsMoveDetailMapper . insertWmsMoveDetail ( toInsertedWmsMoveDetail ) ;
}
/ * *
* 在 移 库 出 库 时 更 新 移 库 合 库 记 录 , 判 断 是 否 解 锁 原 库 位
*
* @param wmsMove
* @param updatedWmsMoveDetail
* @param wmsMoveDetailList
* @param oriLocation
* @param userName
* @param currentDate
* /
public void outstockUpdateWmsMove ( WmsMove wmsMove , WmsMoveDetail updatedWmsMoveDetail , List < WmsMoveDetail > wmsMoveDetailList , WmsBaseLocation oriLocation ,
String userName , Date currentDate ) {
if ( updatedWmsMoveDetail . getExecuteStatus ( ) . equals ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_OUTSTOCK_FINISH ) ) {
boolean allOustocked = true ; //用来判断原库位是否都已出库完成
for ( WmsMoveDetail moveDetail : wmsMoveDetailList ) {
if ( ! moveDetail . getMoveDetailId ( ) . equals ( updatedWmsMoveDetail . getMoveDetailId ( ) ) ) {
if ( moveDetail . getExecuteStatus ( ) . equals ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_TOEXECUTE )
| | moveDetail . getExecuteStatus ( ) . equals ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_EXECUTING ) ) {
allOustocked = false ;
}
}
}
//如果都已出库完成,解锁库位
if ( allOustocked ) {
oriLocation . setLocationStatus ( WmsConstants . WMS_BASE_LOCATION_STATUS_NORMAL ) ;
oriLocation . setUpdateBy ( userName ) ;
oriLocation . setUpdateTime ( currentDate ) ;
wmsBaseLocationMapper . updateWmsBaseLocation ( oriLocation ) ;
wmsMove . setExecuteStatus ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_OUTSTOCK_FINISH ) ;
}
} else {
wmsMove . setExecuteStatus ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_EXECUTING ) ;
}
if ( wmsMove . getBeginTime ( ) = = null ) {
wmsMove . setBeginTime ( currentDate ) ;
}
wmsMove . setUpdateDate ( currentDate ) ;
wmsMove . setUpdateBy ( userName ) ;
wmsMoveMapper . updateWmsMove ( wmsMove ) ;
}
/ * *
* 在 移 库 出 库 时 更 新 移 库 合 库 记 录 , 判 断 是 否 解 锁 原 库 位
*
@ -492,7 +571,7 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
* @param applyQty
* @param userName
* @param currentDate
* /
* //*
public void outstockUpdateWmsMove ( WmsMove wmsMove , List < WmsMove > wmsMoveList , WmsBaseLocation oriLocation ,
BigDecimal applyQty , String userName , Date currentDate ) {
BigDecimal planAmount = wmsMove . getPlanAmount ( ) ;
@ -530,8 +609,7 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
wmsMove . setUpdateDate ( currentDate ) ;
wmsMove . setUpdateBy ( userName ) ;
wmsMoveMapper . updateWmsMove ( wmsMove ) ;
}
} * /
public void moveOutUpdateRawStock ( String locationCode , String materialBarcode , BigDecimal applyQty ,
String userName , Date currentDate ) {
WmsRawStock wmsRawStock = wmsRawStockMapper . selectRawStockByBarcode ( materialBarcode ) ;
@ -606,7 +684,7 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
R < MesBaseBarcodeInfo > baseBarcodeInfoR = remoteMesService . getBarcode ( materialBarcode , SecurityConstants . INNER ) ;
MesBaseBarcodeInfo baseBarcodeInfo = baseBarcodeInfoR . getData ( ) ;
if ( baseBarcodeInfo = = null ) {
throw new ServiceException ( "物料 编 码有误") ;
throw new ServiceException ( "物料 条 码有误") ;
}
WmsBaseLocation targetLocation = wmsBaseLocationMapper . selectWmsBaseLocationByLocationCode ( locationCode ) ;
@ -617,46 +695,41 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
String userName = SecurityUtils . getUsername ( ) ;
Date currentDate = new Date ( ) ;
String batchCode = baseBarcodeInfo . getBatchCode ( ) ;
WmsMove queryMove = new WmsMove ( ) ;
queryMove . setTaskCode ( taskCode ) ;
// queryMove.setInstockBatch(batchCode);
queryMove . setTargetLocationCode ( locationCode ) ;
List < WmsMove > wmsMoveList = wmsMoveMapper . selectWmsMoveList ( queryMove ) ;
if ( wmsMoveList = = null | | wmsMoveList . isEmpty ( ) ) {
WmsMove wmsMove = wmsMoveMapper . selectWmsMoveByTaskCode ( taskCode ) ;
if ( wmsMove = = null ) {
throw new ServiceException ( "没有此移库信息" ) ;
}
WmsMove wmsMove = wmsMoveList . stream ( ) . filter ( move - >
move . getInstockBatch ( ) . equals ( batchCode ) ) . findFirst ( ) . get ( ) ;
if ( wmsMove = = null ) {
if ( ! wmsMove . getTargetLocationCode ( ) . equals ( locationCode ) ) {
throw new ServiceException ( "没有此移库信息" ) ;
}
String executeStatus = wmsMove . getExecuteStatus ( ) ;
if ( executeStatus . equals ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_INSTOCK_FINISH ) ) {
throw new ServiceException ( "此 批次 已移库入库完成,不能再入库") ;
throw new ServiceException ( "此 条码 已移库入库完成,不能再入库") ;
}
BigDecimal planAmount = wmsMove . getPlanAmount ( ) ;
BigDecimal realInstockAmount = wmsMove . getRealInstockAmount ( ) ;
BigDecimal updateRealInstockAmount = realInstockAmount . add ( applyQty ) ;
if ( updateRealInstockAmount . compareTo ( planAmount ) > 0 ) {
throw new ServiceException ( "数量不能大于" + planAmount . subtract ( realInstockAmount ) ) ;
List < WmsMoveDetail > wmsMoveDetailList = wmsMove . getWmsMoveDetailList ( ) ;
if ( wmsMoveDetailList = = null | | wmsMoveDetailList . isEmpty ( ) ) {
throw new ServiceException ( "没有此移库信息" ) ;
}
WmsMoveDetail existedMoveDetail = wmsMoveDetailMapper . selectWmsMoveDetailByMoveIdAndBarCode ( wmsMove . getMoveId ( ) , materialBarcode ) ;
WmsMoveDetail existedMoveDetail = wmsMoveDetailList . stream ( ) . filter ( move - >
move . getInstockBatch ( ) . equals ( materialBarcode ) ) . findFirst ( ) . get ( ) ;
if ( existedMoveDetail = = null ) {
throw new ServiceException ( "此物料条码还未移库出库,不能移库入库" ) ;
throw new ServiceException ( " 没有此移库信息 ") ;
}
if ( existedMoveDetail . getExecuteStatus ( ) . equals ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_INSTOCK_FINISH ) ) {
throw new ServiceException ( "此物料条码已移库入库,不能重复入库" ) ;
String detailExecuteStatus = existedMoveDetail . getExecuteStatus ( ) ;
if ( detailExecuteStatus . equals ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_INSTOCK_FINISH ) ) {
throw new ServiceException ( "此条码已移库入库完成,不能再入库" ) ;
}
if ( ! existedMoveDetail . getExecuteStatus ( ) . equals ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_OUTSTOCK_FINISH ) ) {
throw new ServiceException ( "此 物料条码还未移库出库,不能移库 入库") ;
if ( ! detailExecuteStatus. equals ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_OUTSTOCK_FINISH ) ) {
throw new ServiceException ( "此 条码还未出库完成,不能再 入库") ;
}
if ( existedMoveDetail . getRealAmount ( ) . compareTo ( applyQty ) ! = 0 ) {
throw new ServiceException ( "数量需等于" + existedMoveDetail . getRealAmount ( ) ) ;
}
@ -675,11 +748,10 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
existedMoveDetail . setExecuteStatus ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_INSTOCK_FINISH ) ;
existedMoveDetail . setUpdateDate ( currentDate ) ;
existedMoveDetail . setUpdateBy ( userName ) ;
existedMoveDetail . setRealInstockAmount ( applyQty ) ;
wmsMoveDetailMapper . updateWmsMoveDetail ( existedMoveDetail ) ;
//更新移库合库记录,并判断是否解锁库位
instockUpdateWmsMove ( wmsMove , wmsMoveList, targetLocation , applyQty , userName , currentDate ) ;
instockUpdateWmsMove ( wmsMove , existedMoveDetail, wmsMoveDetail List, targetLocation , userName , currentDate ) ;
return 1 ;
}
@ -703,6 +775,8 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
rawStock . setWarehouseId ( location . getWarehouseId ( ) ) ;
rawStock . setWarehouseFloor ( location . getWarehouseFloor ( ) ) ;
rawStock . setStockType ( WmsConstants . RWA_STOCK_STOCK_TYPE_RAW ) ;
rawStock . setSafeFlag ( mesBaseBarcodeInfo . getSafeFlag ( ) ) ;
rawStock . setSaleOrderId ( mesBaseBarcodeInfo . getSaleOrderId ( ) ) ;
rawStock . setMaterialId ( mesBaseBarcodeInfo . getMaterialId ( ) ) ;
rawStock . setInstockDate ( mesBaseBarcodeInfo . getAcceptedDate ( ) ) ; //条码中的入库时间
rawStock . setLastOutstockTime ( mesBaseBarcodeInfo . getLastOutstockDate ( ) ) ;
@ -741,6 +815,45 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
/ * *
* 在 移 库 入 库 时 更 新 移 库 合 库 记 录 , 判 断 是 否 解 锁 目 标 库 位
*
* @param wmsMove
* @param updatedWmsMoveDetail
* @param wmsMoveDetailList
* @param userName
* @param currentDate
* /
public void instockUpdateWmsMove ( WmsMove wmsMove , WmsMoveDetail updatedWmsMoveDetail , List < WmsMoveDetail > wmsMoveDetailList , WmsBaseLocation targetLocation ,
String userName , Date currentDate ) {
if ( updatedWmsMoveDetail . getExecuteStatus ( ) . equals ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_INSTOCK_FINISH ) ) {
boolean allInstocked = true ; //用来判断原库位是否都已入库完成
for ( WmsMoveDetail moveDetail : wmsMoveDetailList ) {
if ( ! moveDetail . getMoveDetailId ( ) . equals ( updatedWmsMoveDetail . getMoveDetailId ( ) ) ) {
if ( ! moveDetail . getExecuteStatus ( ) . equals ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_INSTOCK_FINISH ) ) {
allInstocked = false ;
}
}
}
//如果都已入库完成,解锁库位
if ( allInstocked ) {
targetLocation . setLocationStatus ( WmsConstants . WMS_BASE_LOCATION_STATUS_NORMAL ) ;
targetLocation . setUpdateBy ( userName ) ;
targetLocation . setUpdateTime ( currentDate ) ;
wmsBaseLocationMapper . updateWmsBaseLocation ( targetLocation ) ;
wmsMove . setExecuteStatus ( WmsConstants . WMS_MOVE_EXECUTE_STATUS_INSTOCK_FINISH ) ;
wmsMove . setEndTime ( currentDate ) ;
wmsMove . setUpdateDate ( currentDate ) ;
wmsMove . setUpdateBy ( userName ) ;
wmsMoveMapper . updateWmsMove ( wmsMove ) ;
}
}
}
}
/* */ / * *
* 在 移 库 入 库 时 更 新 移 库 合 库 记 录 , 判 断 是 否 解 锁 目 标 库 位
*
* @param wmsMove
@ -748,7 +861,7 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
* @param applyQty
* @param userName
* @param currentDate
* /
* //*
public void instockUpdateWmsMove ( WmsMove wmsMove , List < WmsMove > wmsMoveList , WmsBaseLocation targetLocation ,
BigDecimal applyQty , String userName , Date currentDate ) {
BigDecimal planAmount = wmsMove . getPlanAmount ( ) ;
@ -782,4 +895,4 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
wmsMove . setUpdateBy ( userName ) ;
wmsMoveMapper . updateWmsMove ( wmsMove ) ;
}
}
} * /