Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java =================================================================== diff -u -r14149 -r14226 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 14149) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/recyclingapplication/service/InvoicePlanManagerImpl.java (.../InvoicePlanManagerImpl.java) (revision 14226) @@ -31,6 +31,7 @@ import org.hibernate.criterion.Restrictions; import org.jfree.util.Log; +import com.forgon.Constants; import com.forgon.databaseadapter.service.DateQueryAdapter; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.vo.LoginUserData; @@ -1272,8 +1273,22 @@ return (BooleanUtils.isTrue(vo.getIsTerminated())); } }; + List applicationItems = invoicePlan.getApplicationItems(); Collection notTerminateTousseItems = CollectionUtils.select(invoicePlan.getApplicationItems(), PredicateUtils.notPredicate(terminatePred1)); - + // 计算加急数量 + int totalUrgentAmount = 0; + if(applicationItems != null){ + for (TousseItem tousseItem : applicationItems) { + int urgentAmount = tousseItem.getUrgentAmount(); + if(urgentAmount == 0){ + tousseItem.setUrgent(Constants.STR_NO);// 修改紧急状态 + } + totalUrgentAmount += urgentAmount; + } + } + if(totalUrgentAmount == 0){ + invoicePlan.setUrgent(Constants.STR_NO);// 修改紧急状态 + } /*计算发货状态*/ SupplyRoomConfig config = supplyRoomConfigManager.getSystemParamsObj(); final String invoiceOrigin = config.getInvoiceOrigin(); Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r14155 -r14226 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 14155) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 14226) @@ -1358,13 +1358,10 @@ // 发货处理 private void invoice( InvoicePlan invoicePlan,SubmitInvoiceContext submitInvoiceContext) { - String deliverStatus = invoicePlan.getDeliverStatus(); submitInvoiceContext.getTousseInstancesToUpdate().clear(); Map> updateStockInfo = submitInvoiceContext.getUpdateStockInfo(); List invoiceList = submitInvoiceContext.getInvoiceList(); - if (!InvoicePlan.DELIVERSTATUS_DELIVERED.equals(deliverStatus) - && !InvoicePlan.STATUS_END.equals(deliverStatus)) { - // + if (!invoicePlan.delivered() && !invoicePlan.deliverEnd()) { // 获取最终发货明细 Set avaliableInvoiceItems = getAvaliableInvoiceItem( invoicePlan, submitInvoiceContext); @@ -1559,11 +1556,10 @@ } for(int i=0;i invoiceList = submitInvoiceContext.getInvoiceList(); Map> updateStockInfo = submitInvoiceContext.getUpdateStockInfo();// 用于更新库存的信息 // 更新器械包库存 @@ -3386,6 +3395,7 @@ vo.setInvoicePlanType(invoicePlan.getType()); vo.setGoodsType(tousseType); vo.setCount(vo.getCount()+1); + vo.setUrgentAmount(vo.getUrgentAmount() + 1); vo.setApplicationAmount(vo.getApplicationAmount()+1); vo.setBeforeToday(vo.isBeforeToday() || beforeToday); vo.addInvoicePlanID(invoicePlan.getId()); @@ -3431,6 +3441,7 @@ } vo.addInvoicePlanID(invoicePlan.getId()); vo.setCount(vo.getCount() + notSendAmount); + vo.setUrgentAmount(vo.getUrgentAmount() + applicationItem.getUrgentAmount()); vo.setApplicationAmount(vo.getCount() + notSendAmount); vo.setBeforeToday(vo.isBeforeToday() || beforeToday); // 设置是否含有今天前申请的物品 @@ -3950,6 +3961,9 @@ if(item.terminated()){// 对终止状态的处理 return invoiceItemSet; } + if(submitInvoiceContext.isSendOnlyUrgentGoods() && (item.safelyGetUrgentAmount() == 0)){ + return invoiceItemSet;// 如果是发送紧急物品模式,当前申请项的紧急数量为0,那么跳过 + } // 外来器械包拆包处理 Map invoiceItemMap = new HashMap(); List tousseInstanceList = tousseInstanceManager @@ -3992,6 +4006,10 @@ // } if (invoiceItemMap.size() > 0) { item.setSendOutAmount(1); + if(submitInvoiceContext.isSendOnlyUrgentGoods()){ + item.setUrgentAmount(0);// 修改紧急数量 + item.setUrgent(Constants.STR_NO);// 修改紧急状态 + } for (TousseInstance tousseInstance : tousseInstanceList) { // 必须所有器械包实例状态都变为已发货状态,才能将已发货数量改为1 if (!tousseInstance.isShipped()) { @@ -4252,6 +4270,9 @@ if (amount <= applicationItem.getSendOutAmount()) { return; } + if(submitInvoiceContext.isSendOnlyUrgentGoods() && (applicationItem.safelyGetUrgentAmount() == 0)){ + return ;// 如果是发送紧急物品模式,当前申请项的紧急数量为0,那么跳过 + } String applicationGoodsName = applicationItem.getTousseName(); // 未发货数量 @@ -4267,6 +4288,9 @@ List tousseInstancesToSend = null; int canSendAmount = Math.min(sendOutAmount, notSendAmount);// 能发货的数量 + if(submitInvoiceContext.isSendOnlyUrgentGoods()){ + canSendAmount = Math.min(canSendAmount, applicationItem.getUrgentAmount());// 加急发送模式,发送的数量不能超过加急数量 + } // 如果是消毒物品,要查询此物品能发货的数量。 if (applicationItem.isDisinfection() && isFixedDisinfection(applicationGoodsName, barcodeObjMap)) { @@ -4306,7 +4330,17 @@ } invoiceItem.setTousseName(applicationGoodsName); invoiceItemSet.add(invoiceItem); - + // 修改紧急数量 + if(submitInvoiceContext.isSendOnlyUrgentGoods()){ + int urgentAmount = applicationItem.safelyGetUrgentAmount(); + int actualSendAmount = invoiceItem.getAmount(); + if(actualSendAmount >= urgentAmount){ + applicationItem.setUrgentAmount(0); + applicationItem.setUrgent(Constants.STR_NO);// 修改紧急状态 + }else{ + applicationItem.setUrgentAmount(urgentAmount - actualSendAmount); + } + } sendOutAmount -= invoiceItem.getAmount(); sendOutGoods.put(applicationGoodsName, sendOutAmount); @@ -4316,9 +4350,15 @@ Set invoiceItemSet = new HashSet(); // 代理灭菌单 条码要与单做绑定 if (InvoicePlan.TYPE_PROXYDISINFECTION.equals(invoicePlan.getType())) { + if(submitInvoiceContext.isSendOnlyUrgentGoods()){ + return invoiceItemSet;// 目前只支持普通器械包和外来器械包加急处理 + } invoiceItemSet = getAvaliableInvoiceItemForProxyDisinfection(invoicePlan, submitInvoiceContext); } else if (InvoicePlan.TYPE_FOREIGNPROXYDISINFECTION.equals(invoicePlan .getType())) { + if(submitInvoiceContext.isSendOnlyUrgentGoods()){ + return invoiceItemSet;// 目前只支持普通器械包和外来器械包加急处理 + } invoiceItemSet = getAvaliableInvoiceItemForForeignProxyDisinfection(invoicePlan, submitInvoiceContext); } else if (InvoicePlan.TYPE_FOREIGNTOUSSEAPPLIACTION.equals(invoicePlan .getType())) { @@ -4328,6 +4368,9 @@ if(applicationItem.terminated()){// 对终止状态的处理 continue; } + if(submitInvoiceContext.isSendOnlyUrgentGoods() && (applicationItem.safelyGetUrgentAmount() == 0)){ + continue;// 如果是发送紧急物品模式,当前申请项的紧急数量为0,那么跳过 + } if (TousseItem.TYPE_DIPOSABLE_GOODS.equals(applicationItem.getTousseType())) { getAvaliableInvoiceItemForDisposableGoods(invoicePlan,applicationItem,invoiceItemSet, submitInvoiceContext);