WMS:根据采购订单绑定采购订单的逻辑修改了移库合库逻辑
master
xs 1 year ago
parent 0dc123719d
commit d70e8a0453

@ -439,8 +439,8 @@ public class WmsMobileController extends BaseController {
public TableDataInfo getMoveList(WmsMove wmsMove) {
startPage();
wmsMove.setMoveWay(WmsConstants.WMS_MOVEMERGE_WAY_MANUAL);
wmsMove.setExecuteStatusStr(WmsConstants.WMS_EXECUTE_STATUS_TOEXECUTE + "," + WmsConstants.WMS_MOVE_EXECUTE_STATUS_EXECUTING);
List<WmsMove> wmsMoves = wmsMoveService.selectWmsMoveGroupJoinList(wmsMove);
wmsMove.setExecuteStatusStr(WmsConstants.WMS_EXECUTE_STATUS_TOEXECUTE + "," + WmsConstants.WMS_MOVE_EXECUTE_STATUS_EXECUTING+ "," + WmsConstants.WMS_MOVE_EXECUTE_STATUS_OUTSTOCK_FINISH);
List<WmsMove> wmsMoves = wmsMoveService.selectWmsMoveJoinList(wmsMove);
return getDataTable(wmsMoves);
}
@ -450,9 +450,7 @@ public class WmsMobileController extends BaseController {
// @RequiresPermissions("wms:rawoutstock:query")
@GetMapping(value = "/getMoveListByTaskCode/{taskCode}")
public AjaxResult getMoveListByTaskCode(@PathVariable("taskCode") String taskCode) {
WmsMove queryMove = new WmsMove();
queryMove.setTaskCode(taskCode);
List<WmsMove> wmsMoveList = wmsMoveService.selectWmsMoveJoinList(queryMove);
List<WmsMove> wmsMoveList = wmsMoveService.selectWmsMoveJoinListByTaskCode(taskCode);
return success(wmsMoveList);
}

@ -115,4 +115,23 @@ public interface WmsMoveMapper
* @return
*/
public List<WmsMove> selectWmsMoveJoinList(WmsMove wmsMove);
/**
*
*
* @param taskCode ,Join detail,warehousematerial
* @return
*/
public WmsMove selectWmsMoveByTaskCode(String taskCode);
/**
*
*
* @param taskCode
* @return
*/
public WmsMove selectOnlyWmsMoveByTaskCode(String taskCode);
}

@ -97,6 +97,14 @@ public interface IWmsMoveService
*/
public List<WmsMove> selectWmsMoveJoinList(WmsMove wmsMove);
/**
* PDAmovedetailsetmoveJoin material,warehouse
*
* @param taskCode
* @return
*/
public List<WmsMove> selectWmsMoveJoinListByTaskCode(String taskCode);
/**
*
* @param wmsMoveVo

@ -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 {
}
}
toInsertedMoves = getMovesByRawStocks(wmsRawStocks, wmsMoveApplyVo, userName, currentDate);
toInsertedMoveDetails = getMoveDetailsByRawStocks(wmsRawStocks, wmsMove, userName, currentDate);
} else {//如果是成品
WmsProductStock queryProductStock = new WmsProductStock();
queryProductStock.setLocationCode(oriLocationCode);
@ -269,7 +264,7 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
throw new ServiceException("目标库位有库存,不能进行移库");
}
toInsertedMoves = getMovesByProductStocks(productStocks, wmsMoveApplyVo, userName, currentDate);
toInsertedMoveDetails = getMoveDetailsByProductStocks(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(toInsertedMoves);
int rows = wmsMoveMapper.batchWmsMoveDetail(toInsertedMoveDetails);
return rows;
}
private List<WmsMove> getMovesByRawStocks(List<WmsRawStock> wmsRawStocks, WmsMoveApplyVo wmsMoveApplyVo,
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);
private List<WmsMoveDetail> getMoveDetailsByRawStocks(List<WmsRawStock> wmsRawStocks, WmsMove wmsMove,
String userName, Date 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,
String userName, Date currentDate) {
List<WmsMove> wmsMoveList = new ArrayList<>();
String taskCode = Seq.getId(Seq.wmsMoveSeqType, Seq.wmsMoveSeqCode);
private List<WmsMoveDetail> getMoveDetailsByProductStocks(List<WmsProductStock> wmsProductStocks, WmsMove wmsMove,
String userName, Date currentDate) {
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);
wmsMoveList.add(wmsMove);
wmsMoveDetailList.add(wmsMoveDetail);
});
return wmsMoveList;
return wmsMoveDetailList;
}
@ -354,16 +332,46 @@ 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);
/**
* PDAmovedetailsetmoveJoin 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);
// }
/**
* join material
*
@ -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, wmsMoveDetailList, 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, wmsMoveDetailList, 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());
@ -744,11 +818,50 @@ public class WmsMoveServiceImpl implements IWmsMoveService {
*
*
* @param wmsMove
* @param wmsMoveList
* @param applyQty
* @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
* @param wmsMoveList
* @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);
}
}
}*/

@ -32,7 +32,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="endTime" column="end_time" />
<result property="warehouseName" column="warehouse_name" />
<result property="materialName" column="material_name" />
</resultMap>
<resultMap id="WmsMoveWmsMoveDetailResult" type="WmsMove" extends="WmsMoveResult">
@ -48,6 +47,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="materialId" column="sub_material_id" />
<result property="planAmount" column="sub_plan_amount" />
<result property="realAmount" column="sub_real_amount" />
<result property="realInstockAmount" column="sub_real_instock_amount" />
<result property="executeStatus" column="sub_execute_status" />
<result property="executePerson" column="sub_execute_person" />
<result property="executeTime" column="sub_execute_time" />
@ -58,6 +58,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="updateBy" column="sub_update_by" />
<result property="updateDate" column="sub_update_date" />
<result property="activeFlag" column="sub_active_flag" />
<result property="materialName" column="sub_material_name" />
</resultMap>
<sql id="selectWmsMoveVo">
@ -90,7 +92,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<select id="selectWmsMoveByMoveId" parameterType="Long" resultMap="WmsMoveWmsMoveDetailResult">
select a.move_id, a.task_code, a.warehouse_id, a.ori_location_code, a.target_location_code, a.instock_batch, a.material_id, a.plan_amount, a.real_outstock_amount, a.real_instock_amount, a.operation_type, a.move_way, a.move_type, a.apply_reason, a.audit_reason, a.audit_status, a.execute_status, a.apply_by, a.apply_date, a.audit_by, a.audit_date, a.update_by, a.update_date, a.begin_time, a.end_time,
b.move_detail_id as sub_move_detail_id, b.move_id as sub_move_id, b.location_code as sub_location_code, b.material_barcode as sub_material_barcode, b.instock_batch as sub_instock_batch, b.material_id as sub_material_id, b.plan_amount as sub_plan_amount, b.real_amount as sub_real_amount, b.execute_status as sub_execute_status, b.execute_person as sub_execute_person, b.execute_time as sub_execute_time, b.move_detail_type as sub_move_detail_type, b.machine_name as sub_machine_name, b.create_by as sub_create_by, b.create_date as sub_create_date, b.update_by as sub_update_by, b.update_date as sub_update_date, b.active_flag as sub_active_flag
b.move_detail_id as sub_move_detail_id, b.move_id as sub_move_id, b.location_code as sub_location_code, b.material_barcode as sub_material_barcode, b.instock_batch as sub_instock_batch, b.material_id as sub_material_id, b.plan_amount as sub_plan_amount, b.real_amount as sub_real_amount, b.execute_status as sub_execute_status, b.execute_person as sub_execute_person, b.execute_time as sub_execute_time, b.machine_name as sub_machine_name, b.create_by as sub_create_by, b.create_date as sub_create_date, b.update_by as sub_update_by, b.update_date as sub_update_date, b.active_flag as sub_active_flag
from wms_move a
left join wms_move_detail b on b.move_id = a.move_id
where a.move_id = #{moveId}
@ -222,17 +224,39 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<sql id="selectWmsMoveJoinVo">
select wm.move_id, wm.task_code, wm.warehouse_id, wm.ori_location_code, wm.target_location_code,
wm.move_type,wm.instock_batch,wm.plan_amount,wm.real_outstock_amount,wm.real_instock_amount,wm.execute_status,
mbmi.material_name,wbw.warehouse_name
from wms_move wm left join mes_base_material_info mbmi on wm.material_id = mbmi.material_id
left join wms_base_warehouse wbw on wm.warehouse_id = wbw.warehouse_id
wm.move_type,wm.instock_batch,wm.plan_amount,wm.real_outstock_amount,wm.real_instock_amount,wm.execute_status,wm.apply_by,wm.apply_date,wm.begin_time,wm.end_time,
wbw.warehouse_name
from wms_move wm left join wms_base_warehouse wbw on wm.warehouse_id = wbw.warehouse_id
</sql>
<select id="selectWmsMoveJoinList" parameterType="WmsMove" resultMap="WmsMoveResult">
<include refid="selectWmsMoveJoinVo"/>
<where>
<if test="taskCode != null and taskCode != ''"> and task_code = #{taskCode}</if>
<if test="taskCode != null and taskCode != ''"> and wm.task_code = #{taskCode}</if>
<if test="warehouseId != null "> and wm.warehouse_id = #{warehouseId}</if>
<if test="oriLocationCode != null and oriLocationCode != ''"> and wm.ori_location_code = #{oriLocationCode}</if>
<if test="targetLocationCode != null and targetLocationCode != ''"> and wm.target_location_code = #{targetLocationCode}</if>
<if test="operationType != null and operationType != ''"> and wm.operation_type = #{operationType}</if>
<if test="moveWay != null and moveWay != ''"> and wm.move_way = #{moveWay}</if>
<if test="moveType != null and moveType != ''"> and wm.move_type = #{moveType}</if>
<if test="applyReason != null and applyReason != ''"> and wm.apply_reason = #{applyReason}</if>
<if test="auditReason != null and auditReason != ''"> and wm.audit_reason = #{auditReason}</if>
<if test="auditStatus != null and auditStatus != ''"> and wm.audit_status = #{auditStatus}</if>
<if test="executeStatus != null and executeStatus != ''"> and wm.execute_status = #{executeStatus}</if>
<if test="applyBy != null and applyBy != ''"> and wm.apply_by like concat('%', #{applyBy},'%')</if>
<if test="params.beginApplyTime != null and params.beginApplyTime != '' and params.endApplyTime != null and params.endApplyTime != ''">
and wm.apply_date between #{params.beginApplyTime} and #{params.endApplyTime}</if>
<if test="params.beginBeginTime != null and params.beginBeginTime != '' and params.endBeginTime != null and params.endBeginTime != ''">
and wm.begin_time between #{params.beginBeginTime} and #{params.endBeginTime}</if>
<if test="params.beginEndTime != null and params.beginEndTime != '' and params.endEndTime != null and params.endEndTime != ''">
and wm.end_time between #{params.beginEndTime} and #{params.endEndTime}</if>
<if test="executeStatusStr != null and executeStatusStr != ''"> and execute_status in (${executeStatusStr})</if>
</where>
</select>
@ -258,4 +282,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
</foreach>
</insert>
<select id="selectWmsMoveByTaskCode" parameterType="String" resultMap="WmsMoveWmsMoveDetailResult">
select a.move_id, a.task_code, a.warehouse_id, a.ori_location_code, a.target_location_code, a.instock_batch, a.material_id, a.plan_amount, a.real_outstock_amount, a.real_instock_amount, a.operation_type, a.move_way, a.move_type, a.apply_reason, a.audit_reason, a.audit_status, a.execute_status, a.apply_by, a.apply_date, a.audit_by, a.audit_date, a.update_by, a.update_date, a.begin_time, a.end_time,
b.move_detail_id as sub_move_detail_id, b.move_id as sub_move_id, b.location_code as sub_location_code, b.material_barcode as sub_material_barcode, b.instock_batch as sub_instock_batch, b.material_id as sub_material_id, b.plan_amount as sub_plan_amount, b.real_amount as sub_real_amount, b.real_instock_amount as sub_real_instock_amount, b.execute_status as sub_execute_status, b.execute_person as sub_execute_person, b.execute_time as sub_execute_time, b.machine_name as sub_machine_name, b.create_by as sub_create_by, b.create_date as sub_create_date, b.update_by as sub_update_by, b.update_date as sub_update_date, b.active_flag as sub_active_flag,
wbw.warehouse_name,
mbmi.material_name as sub_material_name
from wms_move a
left join wms_base_warehouse wbw on a.warehouse_id = wbw.warehouse_id
left join wms_move_detail b on b.move_id = a.move_id
left join mes_base_material_info mbmi on b.material_id=mbmi.material_id
where a.task_code = #{taskCode}
</select>
<select id="selectOnlyWmsMoveByTaskCode" parameterType="String" resultMap="WmsMoveResult">
select a.move_id, a.task_code, a.warehouse_id, a.ori_location_code, a.target_location_code, a.instock_batch, a.material_id, a.plan_amount, a.real_outstock_amount, a.real_instock_amount, a.operation_type, a.move_way, a.move_type, a.apply_reason, a.audit_reason, a.audit_status, a.execute_status, a.apply_by, a.apply_date, a.audit_by, a.audit_date, a.update_by, a.update_date, a.begin_time, a.end_time
from wms_move a
where a.task_code = #{taskCode}
</select>
</mapper>

Loading…
Cancel
Save