Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java =================================================================== diff -u -r12672 -r12718 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java (.../InvoiceAction.java) (revision 12672) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java (.../InvoiceAction.java) (revision 12718) @@ -1480,12 +1480,16 @@ String sendOutGoodsStoreData = StrutsParamUtils.getPraramValue("sendOutGoodsStoreData", ""); String personInCharge = StrutsParamUtils.getPraramValue("personInCharge", ""); String personInChargeCode = StrutsParamUtils.getPraramValue("personInChargeCode", ""); + String warehouseID = StrutsParamUtils.getPraramValue("warehouseID", ""); + String warehouseName = StrutsParamUtils.getPraramValue("warehouseName", ""); params.put("mode", "depart"); params.put("departCode", orgUnitCoding); params.put("assistantSender", sender); params.put("sender", loginUser); params.put("personInCharge", personInCharge); params.put("personInChargeCode", personInChargeCode); + params.put("warehouseID", warehouseID); + params.put("warehouseName", warehouseName); List voList = getInvoiceGoodsVo(sendOutGoodsStoreData); params.put("invoiceItems", voList); Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java =================================================================== diff -u -r12693 -r12718 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java (.../GodownEntryManagerImpl.java) (revision 12693) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/GodownEntryManagerImpl.java (.../GodownEntryManagerImpl.java) (revision 12718) @@ -396,8 +396,8 @@ batchStock = new DisposableGoodsBatchStock(); batchStock.setDiposableGoods(diposableGoods); diposableGoods.getGoodsBatchs().add(batchStock); - diposableGoods.setWareHouseID(entry.getWareHouseId()); - diposableGoods.setWareHouseName(entry.getWareHouseName()); + diposableGoods.setWarehouseID(entry.getWareHouseId()); + diposableGoods.setWarehouseName(entry.getWareHouseName()); diposableGoodBatchStockManager.saveOrUpdate(batchStock); newBatch = true; @@ -780,8 +780,8 @@ objectDao.update(batchStock); objectDao.update(diposableGoods); - diposableGoods.setWareHouseID(entry.getWareHouseId()); - diposableGoods.setWareHouseName(entry.getWareHouseName()); + diposableGoods.setWarehouseID(entry.getWareHouseId()); + diposableGoods.setWarehouseName(entry.getWareHouseName()); // TODO 如果标识号库存为0了,并且没有入库单引用它,那么可以删除标识号 // if(false){ // batchStock.getIdentifications().remove(identification); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/DisposableGoodsStock.java =================================================================== diff -u -r12679 -r12718 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/DisposableGoodsStock.java (.../DisposableGoodsStock.java) (revision 12679) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/assestmanagement/DisposableGoodsStock.java (.../DisposableGoodsStock.java) (revision 12718) @@ -80,8 +80,8 @@ private String inventorySerialNumber; // 物资系统的物资编码,用于与物资系统交互 - private Long wareHouseID;// 仓库ID - private String wareHouseName;// 仓库名字 + private Long warehouseID;// 仓库ID + private String warehouseName;// 仓库名字 @JsonIgnore private Set goodsBatchs = new HashSet(); @@ -302,20 +302,20 @@ this.inventorySerialNumber = inventorySerialNumber; } - public Long getWareHouseID() { - return wareHouseID; + public Long getWarehouseID() { + return warehouseID; } - public void setWareHouseID(Long wareHouseID) { - this.wareHouseID = wareHouseID; + public void setWarehouseID(Long warehouseID) { + this.warehouseID = warehouseID; } - public String getWareHouseName() { - return wareHouseName; + public String getWarehouseName() { + return warehouseName; } - public void setWareHouseName(String wareHouseName) { - this.wareHouseName = wareHouseName; + public void setWarehouseName(String warehouseName) { + this.warehouseName = warehouseName; } public String getPackageSpec() { Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManager.java =================================================================== diff -u -r12703 -r12718 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManager.java (.../DiposableGoodsManager.java) (revision 12703) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManager.java (.../DiposableGoodsManager.java) (revision 12718) @@ -61,7 +61,7 @@ public List getDiposableGoodsBySql_ForUpdate(String sql); - public List getDiposableGoodsByBatchBarcodes_ForUpdate(Collection barcodes); + public List getDiposableGoodsByBatchBarcodes_ForUpdate(String warehouseID,Collection barcodes); // public List getDiposableGoodsByIds_ForUpdate(asd); // 在新的事务中执行删除。 Index: ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/importbasedata/action/ImportSingleStorageController.java =================================================================== diff -u -r12710 -r12718 --- ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/importbasedata/action/ImportSingleStorageController.java (.../ImportSingleStorageController.java) (revision 12710) +++ ssts-maintain/src/main/java/com/forgon/disinfectsystem/maintain/importbasedata/action/ImportSingleStorageController.java (.../ImportSingleStorageController.java) (revision 12718) @@ -98,7 +98,7 @@ poName = "材料入库单"; } // 获取仓库 - List wareHouses = wareHouseManager.getAll(); + List wareHouses = wareHouseManager.getWareHouseListByCurrentOrgUnit(); if(wareHouses == null){ wareHouses = new ArrayList(); } Index: ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java =================================================================== diff -u -r12703 -r12718 --- ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java (.../DiposableGoodsManagerImpl.java) (revision 12703) +++ ssts-diposablegoods/src/main/java/com/forgon/disinfectsystem/diposablegoods/service/DiposableGoodsManagerImpl.java (.../DiposableGoodsManagerImpl.java) (revision 12718) @@ -1083,15 +1083,18 @@ return retList; } // 会一次加载所有的一次性物品以及批次,标识号对象 - public List getDiposableGoodsByBatchBarcodes_ForUpdate(Collection batchBarcodes){ + public List getDiposableGoodsByBatchBarcodes_ForUpdate(String warehouseID,Collection batchBarcodes){ if(batchBarcodes == null || batchBarcodes.size()==0){ return null; } + if(StringUtils.isBlank(warehouseID)){ + return null; + } 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 b.barcode in(%s) order by po.id asc", - DisposableGoodsStock.class.getSimpleName(),barcodes); + .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", + DisposableGoodsStock.class.getSimpleName(),warehouseID,barcodes); Session session = objectDao.getHibernateSession(); Query queryObject = session.createQuery(queryString); queryObject.setLockMode("po", LockMode.UPGRADE); Index: ssts-web/src/main/webapp/disinfectsystem/invoice/invoicePlanExtractedForm.js =================================================================== diff -u -r12633 -r12718 --- ssts-web/src/main/webapp/disinfectsystem/invoice/invoicePlanExtractedForm.js (.../invoicePlanExtractedForm.js) (revision 12633) +++ ssts-web/src/main/webapp/disinfectsystem/invoice/invoicePlanExtractedForm.js (.../invoicePlanExtractedForm.js) (revision 12718) @@ -5,6 +5,35 @@ //定义首篮筐的label变量 var beginBarcodeLabel = '扫描条码:'; var hiddenEndBarcode = true;//隐藏尾篮筐 + +var wareHouseStore = new Ext.data.Store({ + proxy : new Ext.data.HttpProxy({ + url : WWWROOT + '/disinfectSystem/baseData/wareHouseAction!getWareHouseData.do', + method : 'POST' + }), + reader : new Ext.data.JsonReader({ + totalProperty : 'totalCount', + root : 'data' + }, [ + {name : 'id',mapping : 'id'}, + {name : 'name',mapping : 'name'}, + {name : 'orgUnitCode',mapping : 'orgUnitCode'}, + ]), + listeners : { + load : function(store,records) { + var id = top.Ext.getCmp('wareHouseId').getValue(); + var name = top.Ext.getCmp('wareHouseName').getValue(); + if(records.length > 0 && (id == null || id == '')){ + id=records[0].data.id; + name = records[0].data.name; + } + top.Ext.getCmp('wareHouse1').setValue(id); + top.Ext.getCmp('wareHouseId').setValue(id); + top.Ext.getCmp('wareHouseName').setValue(name); + } + } +}); + if(sstsConfig.disableLoadToVirtualBasket == false){ beginBarcodeLabel = '条码/篮筐(首):'; hiddenEndBarcode = false;//显示尾篮筐 @@ -670,6 +699,14 @@ name : 'personInChargeCode', id : 'personInChargeCode' },{ + xtype : 'hidden', + name : 'warehouseID', + id : 'warehouseID' + },{ + xtype : 'hidden', + name : 'warehouseName', + id : 'warehouseName' + },{ layout : 'form', labelWidth :70, columnWidth :.5, @@ -816,7 +853,41 @@ anchor : '99%' }] },{ + columnWidth : .5, layout : 'form', + labelWidth : 40, + items:[{ + xtype : 'combo', + fieldLabel : '仓库', + id : 'wareHouse1', + name : 'wareHouse1', + minChars : 0, + valueField : 'id', + displayField : 'name', + store : wareHouseStore, + forceSelection : true, + lazyInit : false, + triggerAction : 'all', + hideTrigger : true, + typeAhead : false, + allowBlank : false, + width : 100, + listeners : { + select : function(combo, record, index) { + top.Ext.getCmp('wareHouse1').setValue(record.data.name); + top.Ext.getCmp('warehouseID').setValue(record.data.id); + top.Ext.getCmp('wareHouseName').setValue(record.data.name); + top.Ext.getCmp('remark2').focus(); + }, + specialkey : function(field, ee) { + if (ee.getKey() == Ext.EventObject.ENTER) { + top.Ext.getCmp('remark2').focus(); + } + } + } + }] + },{ + layout : 'form', columnWidth : 1, labelWidth :70, items : [{ Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r12713 -r12718 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 12713) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 12718) @@ -1316,10 +1316,10 @@ } } } - private void lockDiposableGoods2(Map barcodeDiposableGoodsMap,Map barcodeDiposableGoodBatchStockMap, + private void lockDiposableGoods2(String warehouseID,Map barcodeToDisposableGoodsStockMap,Map barcodeToDisposableGoodsBatchStockMap, Set barcodesScanned) { List diposableGoodsList = diposableGoodsManager - .getDiposableGoodsByBatchBarcodes_ForUpdate(barcodesScanned); + .getDiposableGoodsByBatchBarcodes_ForUpdate(warehouseID,barcodesScanned); // 获取所有的批次对象 if (diposableGoodsList != null) { for (DisposableGoodsStock diposableGoods : diposableGoodsList) { @@ -1328,9 +1328,9 @@ if (disposableGoodsBatchStockList != null) { for (DisposableGoodsBatchStock disposableGoodsBatchStock : disposableGoodsBatchStockList) { String barcode = disposableGoodsBatchStock.getBarcode(); - barcodeDiposableGoodBatchStockMap.put(barcode, + barcodeToDisposableGoodsBatchStockMap.put(barcode, disposableGoodsBatchStock); - barcodeDiposableGoodsMap.put(barcode, diposableGoods); + barcodeToDisposableGoodsStockMap.put(barcode, diposableGoods); } } } @@ -1346,7 +1346,7 @@ Map sendOutAmountMap, Map sendOutBarcodeAmountMap, Map barcodeObjMap, - Map barcodeDiposableGoodBatchStockMap, + Map barcodeToDisposableGoodsBatchStockMap, Map barcodeTousseInstanceMap, Set toUpdateDiposableGoods, Set toUpdateDiposableGoodBatchStocks, @@ -1358,7 +1358,7 @@ // 获取最终发货明细 Set avaliableInvoiceItems = getAvaliableInvoiceItem( invoicePlan, sendOutAmountMap, sendOutBarcodeAmountMap, - barcodeObjMap); + barcodeObjMap, barcodeToDisposableGoodsBatchStockMap); //找出发货项中的一次性物品,判断是否超支 if(CollectionUtils.isNotEmpty(avaliableInvoiceItems) && StringUtils.isNotBlank(invoicePlan.getProjCode())){ @@ -1396,7 +1396,7 @@ Set tousseInstancesToUpdate = new HashSet(); Invoice invoice = createInvoice(invoicePlan, sendOutBarcodeAmountMap, avaliableInvoiceItems, - sender, barcodeObjMap, assistantSender,toUpdateDiposableGoods,toUpdateDiposableGoodBatchStocks,toUpdateIdentificationOfDiposableGoods,tousseInstancesToUpdate,params); + sender, barcodeObjMap,barcodeToDisposableGoodsBatchStockMap, assistantSender,tousseInstancesToUpdate,params); if (invoice != null) { invoiceList.add(invoice); // 修改库存数量 @@ -1473,12 +1473,16 @@ try { String assistantSender = params.optString("assistantSender"); String sender = params.optString("sender"); + String warehouseID = JSONUtil.optString(params, "warehouseID", ""); if (StringUtils.isBlank(sender)) { throw new RuntimeException("缺失参数sender"); } if (!params.containsKey("invoiceItems")) { throw new RuntimeException("缺失参数invoiceItems"); } + if (StringUtils.isBlank(warehouseID)) { + throw new RuntimeException("未指定发货仓库!"); + } Set invoicePlanIDs = parseInvoicePlanIDs(params); JSONArray jsonArrayInvoiceItems = params @@ -1538,10 +1542,10 @@ Map barcodeTousseInstanceMap = new HashMap(); lockTousseInstances2(barcodeTousseInstanceMap,barcodesScanned); // 锁定一次性物品 - Map barcodeDiposableGoodsMap = new HashMap(); - Map barcodeDiposableGoodBatchStockMap = new HashMap(); - Map barcodeDiposableGoodBatchMap = new HashMap(); - lockDiposableGoods2(barcodeDiposableGoodsMap, barcodeDiposableGoodBatchStockMap, barcodesScanned); + Map barcodeToDisposableGoodsStockMap = new HashMap(); + Map barcodeToDisposableGoodsBatchStockMap = new HashMap(); + Map barcodeToDisposableGoodsBatchMap = new HashMap(); + lockDiposableGoods2(warehouseID,barcodeToDisposableGoodsStockMap, barcodeToDisposableGoodsBatchStockMap, barcodesScanned); // 统计发货数据 Map sendOutAmountMap = new HashMap();// 物品-物品总发货数 @@ -1550,7 +1554,7 @@ summarySendOutInfo(submitInvoiceItems, sendOutAmountMap, sendOutBarcodeAmountMap, barcodeObjMap, - barcodeDiposableGoodBatchStockMap,barcodeDiposableGoodBatchMap, + barcodeToDisposableGoodsBatchStockMap,barcodeToDisposableGoodsBatchMap, barcodeTousseInstanceMap, mode,departCode,params.optString("invoicePlanId")); Set toUpdateDiposableGoods = new HashSet(); @@ -1568,7 +1572,7 @@ } invoice(invoicePlan, invoiceList, sender, assistantSender, sendOutAmountMap, sendOutBarcodeAmountMap, - barcodeObjMap, barcodeDiposableGoodBatchStockMap, + barcodeObjMap, barcodeToDisposableGoodsBatchStockMap, barcodeTousseInstanceMap, toUpdateDiposableGoods, toUpdateDiposableGoodBatchStocks, toUpdateIdentificationOfDiposableGoods,updateStockInfo,params); @@ -1648,10 +1652,9 @@ Set invoiceItems, String sender, Map barcodeObjMap, + Map barcodeToDisposableGoodsBatchStockMap, String assistantSender, - Set toUpdateDiposableGoods, - Set toUpdateDiposableGoodBatchStocks, - Set toUpdateIdentificationOfDiposableGoods,Set tousseInstancesToUpdate,JSONObject params) { + Set tousseInstancesToUpdate,JSONObject params) { if (CollectionUtils.isEmpty(invoiceItems)) { return null; } @@ -1679,13 +1682,13 @@ continue; } DisposableGoodsBatch diposableGoodBatch = (DisposableGoodsBatch) barcodeDevice; + DisposableGoodsBatchStock disposableGoodsBatchStock = barcodeToDisposableGoodsBatchStockMap.get(barcode); String instanceName = diposableGoodBatch .getDiposableGoods().getShowName(); if (!instanceName.equals(invoiceItem.getTousseName()) || sendOutAmount <= 0) { continue; } - DisposableGoodsBatchStock disposableGoodsBatchStock = null; // 获得价格 List identifications = disposableGoodsBatchStock .getIdentifications(); @@ -1733,8 +1736,8 @@ diposableGoodsItem.setBarcode(barcode); diposableGoodsItem.setBatch(diposableGoodBatch .getBatchNumber()); - diposableGoodsItem.setDiposableGoodsID(diposableGoodBatch.getDiposableGoods().getId());// 一次性物品id关联 - diposableGoodsItem.setBatchID(diposableGoodBatch.getId());// 批次id关联 + diposableGoodsItem.setDiposableGoodsID(disposableGoodsBatchStock.getDiposableGoods().getId());// 一次性物品id关联 + diposableGoodsItem.setBatchID(disposableGoodsBatchStock.getId());// 批次id关联 diposableGoodsItem.setIdentificationID(identification.getId());// 标识id关联,这样可以在修改库存价格时做联动修改,jeff li diposableGoodsItem.setInvoice(invoice);// 和发货单关联 diposableGoodsItem.setInvoiceItemID(invoiceItem.getId());// 明细汇总关联 @@ -1747,12 +1750,9 @@ long amountChange = diposableGoodsItem.getAmount(); identification.adjustAmount(-amountChange); // 待更新库存 -// toUpdateIdentificationOfDiposableGoods.add(identification); -// toUpdateDiposableGoodBatchStocks.add(diposableGoodBatch); -// toUpdateDiposableGoods.add(diposableGoodBatch.getDiposableGoods()); objectDao.update(identification); - objectDao.update(diposableGoodBatch); - objectDao.update(diposableGoodBatch.getDiposableGoods()); + objectDao.update(disposableGoodsBatchStock); + objectDao.update(disposableGoodsBatchStock.getDiposableGoods()); // 发货物品单项总价 BigDecimal itemPrice = fluctuationPrice.multiply( new BigDecimal(diposableGoodsItem.getAmount())) @@ -4079,7 +4079,7 @@ private Set getAvaliableInvoiceItem(InvoicePlan invoicePlan, Map sendOutGoods, Map sendOutBarcodeAmountMap, - Map barcodeObjMap) { + Map barcodeObjMap,Map barcodeToDisposableGoodsBatchStockMap) { String errorMessage = null; Set invoiceItemSet = new HashSet(); // 代理灭菌单 条码要与单做绑定