Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java =================================================================== diff -u -r12728 -r12748 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java (.../InvoiceAction.java) (revision 12728) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java (.../InvoiceAction.java) (revision 12748) @@ -1278,6 +1278,7 @@ public void loadGoodsByBarcode(){ String barcode = StrutsParamUtils.getPraramValue("barcode", ""); String saveBarcodeStr = StrutsParamUtils.getPraramValue("saveBarcode", ""); + String warehouseID = StrutsParamUtils.getPraramValue("warehouseID", ""); String orgUnitCoding = StrutsParamUtils.getPraramValue("orgUnitCoding", ""); @@ -1289,6 +1290,7 @@ JsonObject params = new JsonObject(); params.addProperty("barcode", barcode); + params.addProperty("warehouseID", warehouseID); params.add("extraParam", extraParam); try { Index: ssts-web/src/main/webapp/disinfectsystem/invoice/invoicePlanExtractedForm.js =================================================================== diff -u -r12718 -r12748 --- ssts-web/src/main/webapp/disinfectsystem/invoice/invoicePlanExtractedForm.js (.../invoicePlanExtractedForm.js) (revision 12718) +++ ssts-web/src/main/webapp/disinfectsystem/invoice/invoicePlanExtractedForm.js (.../invoicePlanExtractedForm.js) (revision 12748) @@ -220,6 +220,11 @@ function loadGoodsByBarcode(orgUnitCoding) { var barcode = top.Ext.getCmp("scanText").getValue().Trim(); var barcodeEnd = top.Ext.getCmp("scanTextEnd").getValue().Trim(); + var warehouseID = top.Ext.getCmp("warehouseID").getValue(); + if(isUndefinedOrNullOrEmpty(warehouseID)){ + showResult('请先选择仓库!'); + return false; + } //top.Ext.getCmp("scanText").setValue(''); var b = isBarcodeRepeat(barcode); if(b && barcodeEnd == ''){ @@ -240,7 +245,7 @@ top.Ext.getCmp("sendOutGoods").getEl().mask("后台处理中,请稍候..."); Ext.Ajax.request({ url : WWWROOT + '/disinfectSystem/invoiceAction!loadGoodsByBarcode.do', - params : {barcode : barcode,orgUnitCoding : orgUnitCoding,saveBarcode:saveBarcode}, + params : {barcode : barcode,orgUnitCoding : orgUnitCoding,saveBarcode:saveBarcode,warehouseID: warehouseID}, success : function(response, options) { top.Ext.getCmp("sendOutGoods").getEl().unmask(); var result = Ext.decode(response.responseText); Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java =================================================================== diff -u -r12746 -r12748 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java (.../DiposableGoodsManagerImpl.java) (revision 12746) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java (.../DiposableGoodsManagerImpl.java) (revision 12748) @@ -1305,8 +1305,8 @@ DisposableGoods.class.getSimpleName(), sql); return retList; } - // 会一次加载所有的一次性物品以及批次,标识号对象 - public List getDiposableGoodsByBatchBarcodes_ForUpdate(String warehouseID,Collection batchBarcodes){ + // 一次加载所有的一次性物品以及批次,标识号对象 + public List getDisposableGoodsStockByBatchBarcodes(String warehouseID,Collection batchBarcodes){ if(batchBarcodes == null || batchBarcodes.size()==0){ return null; } @@ -1316,14 +1316,39 @@ String barcodes = SqlUtils.joinToWhereInConditionForStringProperties(batchBarcodes); // 锁定的方式批量查询 String queryString = String - .format(" from %s po inner join fetch po.goodsBatchs b inner join fetch b.identifications i where po.warehouseID='%s' b.barcode in(%s) order by po.id asc", + .format(" from %s po inner join fetch po.goodsBatchs b inner join fetch b.identifications i where po.warehouseID=%s and b.barcode in(%s) order by po.id asc", DisposableGoodsStock.class.getSimpleName(),warehouseID,barcodes); + // 此时获取的是按照id升序排列的 + return objectDao.findByHql(queryString); + } + + public List getDisposableGoodsByBatchBarcodes_ForUpdate(String warehouseID,Collection batchBarcodes){ + if(batchBarcodes == null || batchBarcodes.size()==0){ + return null; + } + if(StringUtils.isBlank(warehouseID)){ + return null; + } + // 锁定的方式批量查询 + String queryString = String + .format(" from %s po where po.id in(select b.diposableGoods.id from %s b where %s) order by po.id asc", + DisposableGoods.class.getSimpleName(),DisposableGoodsBatch.class.getSimpleName(),SqlUtils.getStringFieldInCollectionsPredicate("b.barcode", batchBarcodes)); Session session = objectDao.getHibernateSession(); Query queryObject = session.createQuery(queryString); queryObject.setLockMode("po", LockMode.UPGRADE); // 此时获取的是按照id升序排列的 return queryObject.list(); } + public List getDisposableGoodsBatchByBatchBarcodes(Collection batchBarcodes){ + if(batchBarcodes == null || batchBarcodes.size()==0){ + return null; + } + // 锁定的方式批量查询 + String sql = String + .format(" where %s ",SqlUtils.getStringFieldInCollectionsPredicate("po.barcode", batchBarcodes)); + // 此时获取的是按照id升序排列的 + return objectDao.findBySql(DisposableGoodsBatch.class.getSimpleName(),sql); + } // 在新的事务中执行删除。 public void deleteDiposableGoodsById_TRANS_NEW(String id) { // TODO Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java =================================================================== diff -u -r12702 -r12748 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java (.../RecyclingApplicationAction.java) (revision 12702) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/action/RecyclingApplicationAction.java (.../RecyclingApplicationAction.java) (revision 12748) @@ -334,9 +334,9 @@ tousseDefinitionManager.validateRecyclingApplicationCssdPrivilege(application, newTousseItemVoList); //如果校验不通过,则直接返回至前端 - if(jsonObject != null && !jsonObject.optBoolean("success")){ - return jsonObject; - } +// if(jsonObject != null && !jsonObject.optBoolean("success")){ +// return jsonObject; +// } if(projectManager != null && StringUtils.isNotBlank(application.getProjCode())){ //验证是否必须选择项目及所选项目是否已经超支 Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r12738 -r12748 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 12738) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 12748) @@ -1228,9 +1228,9 @@ .getDiposableGoods(); String showName = diposableGoods.getShowName(); - if (disposableGoodsBatch.getStorage() < amount) { - throw new RuntimeException(showName + ",库存不足!"); - } +// if (disposableGoodsBatch.getStorage() < amount) { +// throw new RuntimeException(showName + ",库存不足!"); +// } int totalAmount = MapUtils.getInteger(sendOutAmountMap, showName, 0); totalAmount += amount; @@ -1317,10 +1317,19 @@ } } } - private void lockDiposableGoods2(String warehouseID,Map barcodeToDisposableGoodsStockMap,Map barcodeToDisposableGoodsBatchStockMap, + private void lockDiposableGoods2(String warehouseID,Map barcodeToDisposableGoodsStockMap,Map barcodeToDisposableGoodsBatchMap,Map barcodeToDisposableGoodsBatchStockMap, Set barcodesScanned) { + + List disposableGoodsList = diposableGoodsManager.getDisposableGoodsByBatchBarcodes_ForUpdate(warehouseID, barcodesScanned); + // 获取所有的批次定义 + List disposableGoodsBatchList = diposableGoodsManager.getDisposableGoodsBatchByBatchBarcodes(barcodesScanned); + if(disposableGoodsBatchList != null){ + for (DisposableGoodsBatch disposableGoodsBatch : disposableGoodsBatchList) { + barcodeToDisposableGoodsBatchMap.put(disposableGoodsBatch.getBarcode(), disposableGoodsBatch); + } + } List diposableGoodsList = diposableGoodsManager - .getDiposableGoodsByBatchBarcodes_ForUpdate(warehouseID,barcodesScanned); + .getDisposableGoodsStockByBatchBarcodes(warehouseID,barcodesScanned); // 获取所有的批次对象 if (diposableGoodsList != null) { for (DisposableGoodsStock diposableGoods : diposableGoodsList) { @@ -1546,7 +1555,7 @@ Map barcodeToDisposableGoodsStockMap = new HashMap(); Map barcodeToDisposableGoodsBatchStockMap = new HashMap(); Map barcodeToDisposableGoodsBatchMap = new HashMap(); - lockDiposableGoods2(warehouseID,barcodeToDisposableGoodsStockMap, barcodeToDisposableGoodsBatchStockMap, barcodesScanned); + lockDiposableGoods2(warehouseID,barcodeToDisposableGoodsStockMap, barcodeToDisposableGoodsBatchMap,barcodeToDisposableGoodsBatchStockMap, barcodesScanned); // 统计发货数据 Map sendOutAmountMap = new HashMap();// 物品-物品总发货数 @@ -2873,21 +2882,26 @@ } } else if (barcodeDevice instanceof DisposableGoodsBatch) { // 一次性物品 - DisposableGoodsBatch diposableGoodBatch = (DisposableGoodsBatch) barcodeDevice; - DisposableGoods diposableGoods = diposableGoodBatch + Long warehouseID = params.get("warehouseID").getAsLong(); + DisposableGoodsBatch disposableGoodsBatch = (DisposableGoodsBatch) barcodeDevice; + DisposableGoods diposableGoods = disposableGoodsBatch .getDiposableGoods(); String name = diposableGoods.getName(); String specification = diposableGoods.getSpecification(); if (StringUtils.isNotBlank(specification)) { name = String.format("%s[%s]", diposableGoods.getName(), specification); } + DisposableGoodsBatchStock disposableGoodsBatchStock = diposableGoodsManager.getDisposableGoodsStockByBatchNumber(warehouseID, diposableGoods.getId(), disposableGoodsBatch.getBatchNumber()); + if(disposableGoodsBatchStock == null){ + return buildErrorMsgJsonResult("批次库存为空!"); + } // 验证库存 - if(diposableGoodBatch.getStorage().intValue() <= 0){ + if(disposableGoodsBatchStock.getStorage().intValue() <= 0){ return buildErrorMsgJsonResult(String.format("[%s]库存不足!", name)); } // ***验证一次性物品*** - Date expDate = diposableGoodBatch.getExpDate(); + Date expDate = disposableGoodsBatch.getExpDate(); String expDateStr = DateFormatUtils.format(expDate, "yyyy-MM-dd HH:mm:ss"); if (new Date().after(expDate)) {// 一次性物品失效 @@ -2896,7 +2910,7 @@ // 获取单价 List identificationOfDiposableGoodss = diposableGoodBatchStockManager - .getIdentificationsWithNoZeroStroge(diposableGoodBatch + .getIdentificationsWithNoZeroStroge(disposableGoodsBatchStock .getId()); Double price = 0.0; @@ -2914,11 +2928,11 @@ JsonObject data = new JsonObject(); data.addProperty("name", name); data.addProperty("showTousseName", name); - data.addProperty("barcode", diposableGoodBatch.getBarcode()); + data.addProperty("barcode", disposableGoodsBatch.getBarcode()); data.addProperty("diposable", Constants.STR_YES); data.addProperty("batchNumber", - diposableGoodBatch.getBatchNumber()); - data.addProperty("storage", diposableGoodBatch.getStorage()); + disposableGoodsBatch.getBatchNumber()); + data.addProperty("storage", disposableGoodsBatchStock.getStorage()); data.addProperty("price", price); data.addProperty("fluctuationPrice", fluctuationPrice); @@ -3223,17 +3237,22 @@ } } else if (barcodeDevice instanceof DisposableGoodsBatch) { // 一次性物品 - DisposableGoodsBatch disposableGoodsBatchStock = (DisposableGoodsBatch) barcodeDevice; - DisposableGoods diposableGoods = disposableGoodsBatchStock + Long warehouseID = params.get("warehouseID").getAsLong(); + DisposableGoodsBatch disposableGoodsBatch = (DisposableGoodsBatch) barcodeDevice; + DisposableGoods diposableGoods = disposableGoodsBatch .getDiposableGoods(); String name = diposableGoods.getName(); String specification = diposableGoods.getSpecification(); if (StringUtils.isNotBlank(specification)) { name = String.format("%s[%s]", diposableGoods.getName(), specification); } + DisposableGoodsBatchStock disposableGoodsBatchStock = diposableGoodsManager.getDisposableGoodsStockByBatchNumber(warehouseID, diposableGoods.getId(), disposableGoodsBatch.getBatchNumber()); + if(disposableGoodsBatchStock == null){ + return buildErrorMsgJsonResult("批次库存为空!"); + } // ***验证一次性物品*** - Date expDate = disposableGoodsBatchStock.getExpDate(); + Date expDate = disposableGoodsBatch.getExpDate(); String expDateStr = DateFormatUtils.format(expDate, "yyyy-MM-dd HH:mm:ss"); if (new Date().after(expDate)) {// 一次性物品失效 @@ -3260,10 +3279,10 @@ JsonObject data = new JsonObject(); data.addProperty("name", name); data.addProperty("showTousseName", name); - data.addProperty("barcode", disposableGoodsBatchStock.getBarcode()); + data.addProperty("barcode", disposableGoodsBatch.getBarcode()); data.addProperty("diposable", Constants.STR_YES); data.addProperty("batchNumber", - disposableGoodsBatchStock.getBatchNumber()); + disposableGoodsBatch.getBatchNumber()); data.addProperty("storage", disposableGoodsBatchStock.getStorage()); data.addProperty("price", price); data.addProperty("fluctuationPrice", fluctuationPrice); Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManager.java =================================================================== diff -u -r12746 -r12748 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManager.java (.../DiposableGoodsManager.java) (revision 12746) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManager.java (.../DiposableGoodsManager.java) (revision 12748) @@ -82,8 +82,12 @@ public List getDisposableGoodsBySql_ForUpdate(String sql); - public List getDiposableGoodsByBatchBarcodes_ForUpdate(String warehouseID,Collection barcodes); + public List getDisposableGoodsStockByBatchBarcodes(String warehouseID,Collection barcodes); + public List getDisposableGoodsByBatchBarcodes_ForUpdate(String warehouseID,Collection barcodes); + + public List getDisposableGoodsBatchByBatchBarcodes(Collection barcodes); + // public List getDiposableGoodsByIds_ForUpdate(asd); // 在新的事务中执行删除。 public void deleteDiposableGoodsById_TRANS_NEW(String id);