Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java =================================================================== diff -u -r20576 -r20813 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java (.../InvoiceAction.java) (revision 20576) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/action/InvoiceAction.java (.../InvoiceAction.java) (revision 20813) @@ -55,6 +55,7 @@ import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatch; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsStock; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoods; import com.forgon.disinfectsystem.entity.assestmanagement.GodownEntryItem; import com.forgon.disinfectsystem.entity.assestmanagement.TousseStock; import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; @@ -1608,6 +1609,31 @@ result.add("data", gson.toJsonTree(Collections.singleton(vo), gsonType)); return result; + } else if("expensiveGoods".equals(type)) { + final JsonObject data = src.get("data").getAsJsonObject(); + InvoiceGoodsVo vo = new InvoiceGoodsVo(); + + vo.setDiposable(Constants.STR_NO); + vo.setTousseType(ExpensiveGoods.TYPE_NAME); + + vo.setBarcode(data.get("barcode").getAsString()); + vo.setName(data.get("name").getAsString()); + if(!data.get("ttsName").isJsonNull()){ + vo.setTtsName(data.get("ttsName").getAsString()); + } + + vo.setShowTousseName(data.get("name").getAsString()); + vo.setPrice(String.valueOf(data.get("price").getAsDouble())); + vo.setFluctuationPrice(String.valueOf(data.get("fluctuationPrice").getAsDouble())); + vo.setStorage(String.valueOf(data.get("storage").getAsLong())); + vo.setSterilizerName("-"); + vo.setFrequency("-"); + + vo.setShowResult(tips); + vo.setTypeInfoOnScanned(data.get("typeInfoOnScanned").getAsString()); + result.add("data", gson.toJsonTree(Collections.singleton(vo), gsonType)); + return result; + } else if("tousseInstance".equals(type)) { final JsonObject data = src.get("data").getAsJsonObject(); InvoiceGoodsVo vo = new InvoiceGoodsVo(); Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r20634 -r20813 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 20634) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 20813) @@ -65,6 +65,8 @@ import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsIdentification; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsStock; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveDisposablegoods; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoods; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsInstance; import com.forgon.disinfectsystem.entity.basedatamanager.container.Container; import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; @@ -2495,7 +2497,10 @@ if (CssdUtils.getSystemSetConfigByNameBool("enableTousseVoluntarilyUrgent", false)) { recalculateUrgentTousse(AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig(), submitInvoiceContext); } -// throw new RuntimeException("发货速度测试!"); +// if(true){ +// throw new RuntimeException("发货速度测试!"); +// } + return submitInvoiceContext; } @@ -4294,6 +4299,62 @@ result.add("tips", tips); return result; + }else if (barcodeDevice instanceof ExpensiveGoodsInstance) { + if(Invoice.TYPE_OPERATION_RESERVATION.equals(invoiceType)){ + return buildErrorMsgJsonResult("手术预约发货暂时不支持高值耗材!"); + } + if(Invoice.TYPE_CUSTOM.equals(invoiceType)){ + return buildErrorMsgJsonResult("自定义发货暂时不支持高值耗材!"); + } + // 高值耗材 + ExpensiveGoodsInstance expensiveGoodsInstance = (ExpensiveGoodsInstance) barcodeDevice; + if(!expensiveGoodsInstance.inWarehouse()){ + return buildErrorMsgJsonResult(String.format("条码为[%s]的高值耗材状态为%s,不能发货", barcode,expensiveGoodsInstance.getStatus())); + } + + ExpensiveGoods expensiveGoods = expensiveGoodsInstance.getExpensiveGoods(); + if(expensiveGoods == null){ + return buildErrorMsgJsonResult(String.format("条码为[%s]的高值耗材的定义已被删除", barcode)); + } + String showName = expensiveGoods.getShowName(); + +// ExpensiveGoodsStock disposableGoodsBatchStock = expensiveGoodsInstance.getDisposableGoodsBatchStock(); +// if(disposableGoodsBatchStock == null){ +// return buildErrorMsgJsonResult(String.format("条码为[%s]的高值耗材的批次库存已被删除", barcode)); +// } + + // ***验证失效期*** +// Date expDate = disposableGoodsBatchStock.getExpDate(); +// if (new Date().after(expDate)) {// 一次性物品失效 +// return buildErrorMsgJsonResult(String.format("[%s]已过期", expensiveGoods.getShowName())); +// } + + // 获取单价 + Double price = expensiveGoodsInstance.getPrice(); + Double fluctuationPrice = supplyRoomConfigManager.getExpensiveGoodsFluctuationPrice(price); + + JSONObject typeInfoOnScanned = new JSONObject(); + typeInfoOnScanned.put("expensiveGoodsId", expensiveGoods.getId()); + typeInfoOnScanned.put("expensiveGoodsStockId", expensiveGoodsInstance.getExpensiveGoodsStockId()); + typeInfoOnScanned.put("expensiveGoodsInstanceId", expensiveGoodsInstance.getId()); + JsonObject data = new JsonObject(); + data.addProperty("name", showName); + data.addProperty("ttsName", expensiveGoods.getTtsName()); + data.addProperty("showTousseName", showName); + data.addProperty("barcode", expensiveGoodsInstance.getBarcode()); + data.addProperty("diposable", Constants.STR_NO); + data.addProperty("storage", 1); + data.addProperty("price", price); + data.addProperty("fluctuationPrice", fluctuationPrice); + data.addProperty("typeInfoOnScanned", typeInfoOnScanned.toString()); + JsonObject result = new JsonObject(); + result.addProperty("success", true); + result.addProperty("barcode", barcode); + result.addProperty("type", "expensiveGoods"); + result.add("data", data); + result.add("tips", tips); + return result; + }else if (barcodeDevice instanceof DisposableGoodsBatch) { if(Invoice.TYPE_OPERATION_RESERVATION.equals(invoiceType)){ return buildErrorMsgJsonResult("手术预约发货暂时不支持一次性物品!"); @@ -4745,6 +4806,7 @@ String goodsName = applicationItem.getTousseName(); Long disposableGoodsId = applicationItem.getDisposableGoodsId(); + Long expensiveGoodsId = applicationItem.getExpensiveGoodsId(); TousseDefinition tousseDefinition = null; @@ -4764,6 +4826,9 @@ if(DatabaseUtil.isPoIdValid(disposableGoodsId)){ // 一次性物品,并且已经记录id,那么就用id作为key mapKey = disposableGoodsId.toString(); + }else if(DatabaseUtil.isPoIdValid(expensiveGoodsId)){ + // 高值耗材,并且已经记录id,那么就用id作为key + mapKey = expensiveGoodsId.toString(); } ApplicationGoodsVo vo = datas.get(mapKey); if (vo == null) { @@ -4794,6 +4859,9 @@ vo.getDisposableGoodsIdSet().add(disposableGoodsId); disposableGoodsIdSet.add(disposableGoodsId); } + if(DatabaseUtil.isPoIdValid(expensiveGoodsId)){ + vo.getExpensiveGoodsIdSet().add(expensiveGoodsId); + } // 中包装数量 if(applicationItem.isDisposableGoods()){