diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsMobileController.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsMobileController.java index d85b5704..3ba99552 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsMobileController.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/controller/WmsMobileController.java @@ -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 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 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 wmsMoveList = wmsMoveService.selectWmsMoveJoinList(queryMove); + List wmsMoveList = wmsMoveService.selectWmsMoveJoinListByTaskCode(taskCode); return success(wmsMoveList); } diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/mapper/WmsMoveMapper.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/mapper/WmsMoveMapper.java index 9cbfa417..5120ec7a 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/mapper/WmsMoveMapper.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/mapper/WmsMoveMapper.java @@ -115,4 +115,23 @@ public interface WmsMoveMapper * @return 移库合库记录集合 */ public List selectWmsMoveJoinList(WmsMove wmsMove); + + /** + * 查询移库合库记录 + * + * @param taskCode 移库合库记录任务编号,Join detail,warehouse和material + * @return 移库合库记录 + */ + public WmsMove selectWmsMoveByTaskCode(String taskCode); + + + /** + * 查询移库合库记录 + * + * @param taskCode 移库合库记录任务编号 + * @return 移库合库记录 + */ + public WmsMove selectOnlyWmsMoveByTaskCode(String taskCode); + + } diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsMoveService.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsMoveService.java index 49a8d24f..cdf92824 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsMoveService.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/IWmsMoveService.java @@ -97,6 +97,14 @@ public interface IWmsMoveService */ public List selectWmsMoveJoinList(WmsMove wmsMove); + /** + * 查询移库合库记录明细列表(兼容PDA老版本,把movedetail的信息set到move中),Join material,warehouse + * + * @param taskCode 任务编号 + * @return 移库合库记录 + */ + public List selectWmsMoveJoinListByTaskCode(String taskCode); + /** * 人工移库出库 * @param wmsMoveVo diff --git a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsMoveServiceImpl.java b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsMoveServiceImpl.java index 6f71d08e..cdf29e57 100644 --- a/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsMoveServiceImpl.java +++ b/hw-modules/hw-wms/src/main/java/com/hw/wms/service/impl/WmsMoveServiceImpl.java @@ -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 wmsMoveDetailList = wmsMove.getWmsMoveDetailList(); - Long moveId = wmsMove.getMoveId(); - if (StringUtils.isNotNull(wmsMoveDetailList)) { - List list = new ArrayList(); - 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 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 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 getMovesByRawStocks(List wmsRawStocks, WmsMoveApplyVo wmsMoveApplyVo, - String userName, Date currentDate) { - List 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 getMoveDetailsByRawStocks(List wmsRawStocks, WmsMove wmsMove, + String userName, Date currentDate) { + List 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 getMovesByProductStocks(List wmsProductStocks, WmsMoveApplyVo wmsMoveApplyVo, - String userName, Date currentDate) { - List wmsMoveList = new ArrayList<>(); - String taskCode = Seq.getId(Seq.wmsMoveSeqType, Seq.wmsMoveSeqCode); + private List getMoveDetailsByProductStocks(List wmsProductStocks, WmsMove wmsMove, + String userName, Date currentDate) { + List 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 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 selectWmsMoveJoinListByTaskCode(String taskCode) { + WmsMove wmsMove = wmsMoveMapper.selectWmsMoveByTaskCode(taskCode); + List wmsMoveDetailList = wmsMove.getWmsMoveDetailList(); + + List 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 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 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 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 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 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 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 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 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 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 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); } -} +}*/ diff --git a/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsMoveMapper.xml b/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsMoveMapper.xml index f8d1475a..1823b9d4 100644 --- a/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsMoveMapper.xml +++ b/hw-modules/hw-wms/src/main/resources/mapper/wms/WmsMoveMapper.xml @@ -32,7 +32,6 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - @@ -48,6 +47,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + @@ -58,6 +58,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + @@ -90,7 +92,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - and task_code = #{taskCode} + and wm.task_code = #{taskCode} + and wm.warehouse_id = #{warehouseId} + and wm.ori_location_code = #{oriLocationCode} + and wm.target_location_code = #{targetLocationCode} + and wm.operation_type = #{operationType} + and wm.move_way = #{moveWay} + and wm.move_type = #{moveType} + and wm.apply_reason = #{applyReason} + and wm.audit_reason = #{auditReason} + and wm.audit_status = #{auditStatus} + and wm.execute_status = #{executeStatus} + and wm.apply_by like concat('%', #{applyBy},'%') + + + + and wm.apply_date between #{params.beginApplyTime} and #{params.endApplyTime} + + + and wm.begin_time between #{params.beginBeginTime} and #{params.endBeginTime} + + + and wm.end_time between #{params.beginEndTime} and #{params.endEndTime} + and execute_status in (${executeStatusStr}) + @@ -258,4 +282,25 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + + + + + + +