Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r28714 -r28837 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 28714) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 28837) @@ -2990,13 +2990,56 @@ submitInvoiceContext.setParams(params); JSONArray jsonArrayInvoiceItems = params.getJSONArray("invoiceItems"); + //校验限制发货科室的器械包是否为来自该科室 + validateTousseInstanceFromDepartForLimitInvoice(departCode,depart,jsonArrayInvoiceItems); + if(Invoice.TYPE_OPERATION_RESERVATION_MERGE.equals(invoiceType)){ parseParametersForOperationReservationMerge(jsonArrayInvoiceItems, submitInvoiceContext); }else{ List submitInvoiceItems = parseParameters(jsonArrayInvoiceItems,submitInvoiceContext); submitInvoiceContext.setSubmitInvoiceItems(submitInvoiceItems); } } + + /** + * 判断限制发货科室的包是否都为发到对应的来源科室 + * @param departCode + * @param jsonArrayInvoiceItems + */ + private void validateTousseInstanceFromDepartForLimitInvoice(String departCode ,String depart,JSONArray jsonArrayInvoiceItems){ + if(CollectionUtils.isNotEmpty(jsonArrayInvoiceItems)){ + List barcodeList = new ArrayList<>(); + for(int i = 0;i < jsonArrayInvoiceItems.size();i++){ + barcodeList.add(jsonArrayInvoiceItems.optJSONObject(i).optString("barcode")); + } + int maxSize = 5; + Set tousseNameSet = new HashSet<>(); + List tiList = tousseInstanceManager.getCollectionForUpdate("barcode", barcodeList); + if(CollectionUtils.isNotEmpty(tiList)){ + for(TousseInstance ti : tiList){ + String tousseName = ti.getTousseName(); + TousseDefinition td = ti.getTousseDefinition(); + if(TousseDefinition.STR_YES.equals(td.getLimitInvoiceDepart()) + && (td.isInsideTousse() || td.isDisinfection() || td.isDressing()) + && !StringUtils.equals(ti.getDepartCoding() , departCode)){ + if(!tousseNameSet.contains(tousseName) && tousseNameSet.size() < maxSize + 1){ + tousseNameSet.add(tousseName); + }else{ + break; + } + } + } + if(CollectionUtils.isNotEmpty(tousseNameSet)){ + String noticeTousseNames = StringUtils.join(tousseNameSet.stream().limit(5).collect(Collectors.toList()),"、"); + if(tousseNameSet.size() > maxSize){ + noticeTousseNames += "、..."; + } + throw new SystemException(String.format("如下物品不属于%s,请扫描属于该科室的物品进行发货!
%s", depart , noticeTousseNames)); + } + } + } + } + @Override @Activity(name = AmountControl.INVOICE) public List submitInvoice(JSONArray paramsArray){