Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r26602 -r26633 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 26602) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 26633) @@ -3515,11 +3515,20 @@ targetWareHouse.setId(null); targetWareHouse.setName(""); } - for(TousseInstance ti : tousseInstances){ + //由于器械包实例数量较多,单个单个的处理总时间会比较长,现调整成批量处理.减少总时间 + /*for(TousseInstance ti : tousseInstances){ if(ti != null){ setToWarehouse(ti,targetWareHouse); } + }*/ + List idList = new ArrayList(); + for(TousseInstance ti : tousseInstances){ + idList.add(ti.getId()); } + //批量更新器械包实例的所属仓库(id与名称) + objectDao.excuteSQL(String.format("update %s set wareHouseId = %s , wareHouseName = '%s' where %s", + TousseInstance.class.getSimpleName() , targetWareHouse.getId(), targetWareHouse.getName() , + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("id", idList))); } } Index: ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java =================================================================== diff -u -r26620 -r26633 --- ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 26620) +++ ssts-invoice/src/main/java/com/forgon/disinfectsystem/invoicemanager/service/InvoiceManagerImpl.java (.../InvoiceManagerImpl.java) (revision 26633) @@ -2217,6 +2217,7 @@ // updateGoodsStock(invoice,tousseInstancesToUpdate); updateStockInfo.put(invoice, new HashSet(tousseInstancesToUpdate)); saveInvoice(invoice); + //设置器械包实例的是否常规发货(isRoutine)字段值 updateTousseInstanceStatus(tousseInstancesToUpdate,submitInvoiceContext.getSubmitInvoiceItems()); //修改器械包是否常规发货的方法(cjr) // 设置发货单和器械包实例的关联以及修改器械包状态等属性 updateTousseInstanceStatus(submitInvoiceContext,invoice,tousseInstancesToUpdate); @@ -2293,6 +2294,7 @@ invoiceList.add(invoice); updateStockInfo.put(invoice, new HashSet(tousseInstancesToUpdate)); saveInvoice(invoice); + //设置器械包实例的是否常规发货(isRoutine)字段值 updateTousseInstanceStatus(tousseInstancesToUpdate,submitInvoiceContext.getSubmitInvoiceItems()); //修改器械包是否常规发货的方法(cjr) // 设置发货单和器械包实例的关联以及修改器械包状态等属性 updateTousseInstanceStatus(submitInvoiceContext,invoice,tousseInstancesToUpdate); @@ -2419,19 +2421,44 @@ private void updateTousseInstanceStatus( Set tousseInstancesToUpdate, List submitInvoiceItems) { - + //是否常规发货对应器械包实例id集合的map。key为是否常规发货(是、否等),value为器械包实例id的集合 + Map> isRoutineToTousseInstanceIdsMap = + new HashMap>(); for (TousseInstance tousseInstance : tousseInstancesToUpdate) { String barcode = tousseInstance.getBarcode(); for (SubmitInvoiceItem submitInvoiceItem : submitInvoiceItems) { String barcodeTemp = submitInvoiceItem.getBarcode(); if (barcodeTemp != null && barcodeTemp.equals(barcode)) { - tousseInstance.setIsRoutine(submitInvoiceItem.getIsRoutine()); + //由于器械包实例数量较多,单个单个的处理总时间会比较长,现调整成批量处理.减少总时间 + //tousseInstance.setIsRoutine(submitInvoiceItem.getIsRoutine()); + //改为批量处理 + String isRoutine = submitInvoiceItem.getIsRoutine(); + List idList = isRoutineToTousseInstanceIdsMap.get(isRoutine); + if(idList == null){ + idList = new ArrayList(); + } + idList.add(tousseInstance.getId()); + isRoutineToTousseInstanceIdsMap.put(isRoutine , idList); } } } + //由于器械包实例数量较多,单个单个的处理总时间会比较长,现调整成批量处理.减少总时间 + if(isRoutineToTousseInstanceIdsMap.size() > 0){ + StringBuffer sqls = new StringBuffer(); + for(String isRoutineLooper : isRoutineToTousseInstanceIdsMap.keySet()){ + List idList = isRoutineToTousseInstanceIdsMap.get(isRoutineLooper); + if(CollectionUtils.isNotEmpty(idList)){ + sqls.append(String.format("update %s set isRoutine=%s where %s", + TousseInstance.class.getSimpleName() , + StringUtils.isNotBlank(isRoutineLooper) ? "'"+ isRoutineLooper +"'" : "null", + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("id", idList) + )); + } + } + objectDao.excuteSQL(sqls.toString()); + } - } @@ -2966,6 +2993,7 @@ @Override @Activity(name = AmountControl.INVOICE) public SubmitInvoiceContext submitInvoice(JSONObject params) { + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_INVOICE, Log.TYPE_ADD, "发货开始,params=" + params); String invoiceType = JSONUtil.optString(params, "invoiceType", Invoice.TYPE_APPLICATION); switch (invoiceType) { case Invoice.TYPE_OPERATION_RESERVATION: @@ -3073,6 +3101,11 @@ if (CssdUtils.getSystemSetConfigByNameBool("enableTousseVoluntarilyUrgent", false)) { recalculateUrgentTousse(AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig(), submitInvoiceContext); } + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_INVOICE, Log.TYPE_ADD, "发货结束,params=" + params); + //本地调试用的语句,需要时再放开.正式用必须注释 + /*if(true){ + throw new RuntimeException("test"); + }*/ return submitInvoiceContext; } @@ -4976,7 +5009,11 @@ proxyDisinfection = (ProxyDisinfection)invoicePlan; } - + if(CollectionUtils.isEmpty(tousseInstancesToUpdate)){ + return; + } + //由于器械包实例数量较多,单个单个的处理总时间会比较长,现调整成批量处理.减少总时间 + StringBuffer sqls = new StringBuffer(); Set tousseInstanceIDs = new HashSet(); for (TousseInstance tousseInstance : tousseInstancesToUpdate) { tousseInstanceIDs.add(tousseInstance.getId()); @@ -5000,36 +5037,76 @@ if((canResendout || proxyDisinfectionCanResendout) && !sent){ }else{ - tousseInstance.setStatus(TousseInstance.STATUS_SHIPPED); + /*tousseInstance.setStatus(TousseInstance.STATUS_SHIPPED);*/ } + String settleAccountsDepart = getInvoiceSettleAccountsDepart(invoicePlan, submitInvoiceContext); + String settleAccountsDepartCoding = getInvoiceSettleAccountsDepartCoding(invoicePlan, submitInvoiceContext); + + Long invoice_id = tousseInstance.getInvoice_id(); + String location = tousseInstance.getLocation(); + String locationForDisplay = tousseInstance.getLocationForDisplay(); + String settleAccountsDepartOfTousseInstance = tousseInstance.getSettleAccountsDepart(); + String settleAccountsDepartCodeOfTousseInstance = tousseInstance.getSettleAccountsDepartCode(); + String invoiceSender = tousseInstance.getInvoiceSender(); + Date invoiceSendTime = tousseInstance.getInvoiceSendTime(); + + Long invoice2_id = tousseInstance.getInvoice2_id(); + String location_2 = tousseInstance.getLocation2(); + String locationForDisplay2 = tousseInstance.getLocationForDisplay(); + String settleAccountsDepart2OfTousseInstance = tousseInstance.getSettleAccountsDepart2(); + String settleAccountsDepartCode2OfTousseInstance = tousseInstance.getSettleAccountsDepartCode2(); + String invoiceSender2 = tousseInstance.getInvoiceSender(); + Date invoiceSendTime2 = tousseInstance.getInvoiceSendTime(); + + String operationRoomName = tousseInstance.getOperationRoomName(); + String proxyDisinfectionSent = tousseInstance.getProxyDisinfectionSent(); + String comboTousseDefinitionName = tousseInstance.getComboTousseDefinitionName(); + if(canResendout && sent){ - tousseInstance.setInvoice2_id(invoice.getId()); + /*tousseInstance.setInvoice2_id(invoice.getId()); tousseInstance.setLocation_2(departCoding); tousseInstance.setLocationForDisplay2(depart); tousseInstance.setSettleAccountsDepart2(getInvoiceSettleAccountsDepart(invoicePlan, submitInvoiceContext)); tousseInstance.setSettleAccountsDepartCode2(getInvoiceSettleAccountsDepartCoding(invoicePlan, submitInvoiceContext)); tousseInstance.setInvoiceSender2(sender); - tousseInstance.setInvoiceSendTime2(sendDate); + tousseInstance.setInvoiceSendTime2(sendDate);*/ + invoice_id = invoice.getId(); + location = departCoding; + locationForDisplay = depart; + settleAccountsDepartOfTousseInstance = settleAccountsDepart; + settleAccountsDepartCodeOfTousseInstance = settleAccountsDepartCoding; + invoiceSender = sender; + invoiceSendTime = sendDate; }else{ - tousseInstance.setInvoice_id(invoice.getId()); + /*tousseInstance.setInvoice_id(invoice.getId()); tousseInstance.setLocation(departCoding); tousseInstance.setLocationForDisplay(depart); tousseInstance.setSettleAccountsDepart(getInvoiceSettleAccountsDepart(invoicePlan, submitInvoiceContext)); tousseInstance.setSettleAccountsDepartCode(getInvoiceSettleAccountsDepartCoding(invoicePlan, submitInvoiceContext)); tousseInstance.setInvoiceSender(sender); - tousseInstance.setInvoiceSendTime(sendDate); + tousseInstance.setInvoiceSendTime(sendDate);*/ + + invoice2_id = invoice.getId(); + location_2 = departCoding; + locationForDisplay2 = depart; + settleAccountsDepart2OfTousseInstance = settleAccountsDepart; + settleAccountsDepartCode2OfTousseInstance = settleAccountsDepartCoding; + invoiceSender2 = sender; + invoiceSendTime2 = sendDate; } //如果申请单类型为手术预约申请单或外来器械申请单时,则将器械包信息的手术间设值为申请单的手术间 (XJJQZYY-24 手术预约和器械包信息增加手术相关信息) if(invoicePlan != null && (invoicePlan.isOperationReservationApplication() || invoicePlan.isForeignTousseAppliaction())){ - tousseInstance.setOperationRoomName(invoicePlan.getOperationRoom()); + /*tousseInstance.setOperationRoomName(invoicePlan.getOperationRoom());*/ + operationRoomName = invoicePlan.getOperationRoom(); } // if(proxyDisinfection == null || !proxyDisinfection.resendout()){ // tousseInstance.setStatus(TousseInstance.STATUS_SHIPPED); // } if(proxyDisinfection != null){ - tousseInstance.setProxyDisinfectionSent(Constants.STR_YES); + /*tousseInstance.setProxyDisinfectionSent(Constants.STR_YES);*/ + proxyDisinfectionSent = Constants.STR_YES; } // 聚合包实例,记下聚合包的包名 @@ -5038,24 +5115,81 @@ if(comboTousseDefinition == null){ throw new RuntimeException(String.format("id为%s的聚合包定义已不存在!",tousseInstance.getComboTousseDefinitionId())); } - tousseInstance.setComboTousseDefinitionName(comboTousseDefinition.getName()); + /*tousseInstance.setComboTousseDefinitionName(comboTousseDefinition.getName());*/ + comboTousseDefinitionName = comboTousseDefinition.getName(); // 更新聚合包实例的状态 TousseInstance comboTousseInstance = idToTousseInstanceMap.get(tousseInstance.getComboTousseInstanceId()); if(comboTousseInstance == null){ throw new RuntimeException(String.format("id为%s的聚合包实例已不存在!",tousseInstance.getComboTousseInstanceId())); } // comboTousseInstance.setInvoice_id(invoice.getId()); 一个聚合包实例可能对应多个发货单,所以不能只记一个id - comboTousseInstance.setStatus(TousseInstance.STATUS_SHIPPED); + + //由于器械包实例数量较多,单个单个的处理总时间会比较长,现调整成批量处理.减少总时间 + /*comboTousseInstance.setStatus(TousseInstance.STATUS_SHIPPED); comboTousseInstance.setLocation(departCoding); comboTousseInstance.setLocationForDisplay(depart); comboTousseInstance.setSettleAccountsDepart(getInvoiceSettleAccountsDepart(invoicePlan, submitInvoiceContext)); comboTousseInstance.setSettleAccountsDepartCode(getInvoiceSettleAccountsDepartCoding(invoicePlan, submitInvoiceContext)); comboTousseInstance.setInvoiceSender(sender); - comboTousseInstance.setInvoiceSendTime(sendDate); - objectDao.update(comboTousseInstance); + comboTousseInstance.setInvoiceSendTime(sendDate);*/ + + //由于器械包实例数量较多,单个单个的处理总时间会比较长,现调整成批量处理.减少总时间 + //器械包实例所属的聚合包实例相关字段的更新 + sqls.append(String.format("update %s set status='%s'," + + " location=%s,locationForDisplay=%s," + + "settleAccountsDepart=%s, settleAccountsDepartCode=%s," + + "invoiceSender=%s,invoiceSendTime=%s " + + " where id=%s;", + TousseInstance.class.getSimpleName(), + TousseInstance.STATUS_SHIPPED, + StringUtils.isNotBlank(departCoding) ? ("'"+ departCoding +"'") : "null", + StringUtils.isNotBlank(depart) ? ("'"+ depart +"'") : "null", + StringUtils.isNotBlank(settleAccountsDepart) ? ("'"+ settleAccountsDepart +"'") : "null", + StringUtils.isNotBlank(settleAccountsDepartCoding) ? ("'"+ settleAccountsDepartCoding +"'") : "null", + StringUtils.isNotBlank(sender) ? ("'"+ sender +"'") : "null", + sendDate != null ? dateQueryAdapter.dateAdapter(sendDate) : "null", + comboTousseInstance.getId() + )); + //objectDao.update(comboTousseInstance); } - objectDao.update(tousseInstance); + //器械包实例相关字段的更新 + sqls.append(String.format("update %s set status='%s'," + + "invoice_id=%s,location=%s,locationForDisplay=%s," + + "settleAccountsDepart=%s, settleAccountsDepartCode=%s," + + "invoiceSender=%s,invoiceSendTime=%s," + + "invoice2_id=%s,location_2=%s,locationForDisplay2=%s," + + "settleAccountsDepart2=%s, settleAccountsDepartCode2=%s," + + "invoiceSender2=%s,invoiceSendTime2=%s," + + "operationRoomName=%s,proxyDisinfectionSent=%s," + + "comboTousseDefinitionName=%s where id=%s;", + TousseInstance.class.getSimpleName(), + TousseInstance.STATUS_SHIPPED, + invoice_id, + StringUtils.isNotBlank(location) ? ("'"+ location +"'") : "null", + StringUtils.isNotBlank(locationForDisplay) ? ("'"+ locationForDisplay +"'") : "null", + StringUtils.isNotBlank(settleAccountsDepartOfTousseInstance) ? ("'"+ settleAccountsDepartOfTousseInstance +"'") : "null", + StringUtils.isNotBlank(settleAccountsDepartCodeOfTousseInstance) ? ("'"+ settleAccountsDepartCodeOfTousseInstance +"'") : "null", + StringUtils.isNotBlank(invoiceSender) ? ("'"+ invoiceSender +"'") : "null", + invoiceSendTime != null ? dateQueryAdapter.dateAdapter(invoiceSendTime) : "null", + + invoice2_id, + StringUtils.isNotBlank(location_2) ? ("'"+ location_2 +"'") : "null", + StringUtils.isNotBlank(locationForDisplay2) ? ("'"+ locationForDisplay2 +"'") : "null", + StringUtils.isNotBlank(settleAccountsDepart2OfTousseInstance) ? ("'"+ settleAccountsDepart2OfTousseInstance +"'") : "null", + StringUtils.isNotBlank(settleAccountsDepartCode2OfTousseInstance) ? ("'"+ settleAccountsDepartCode2OfTousseInstance +"'") : "null", + StringUtils.isNotBlank(invoiceSender2) ? ("'"+ invoiceSender2 +"'") : "null", + invoiceSendTime2 != null ? dateQueryAdapter.dateAdapter(invoiceSendTime2) : "null", + StringUtils.isNotBlank(operationRoomName) ? ("'"+ operationRoomName +"'") : "null", + StringUtils.isNotBlank(proxyDisinfectionSent) ? ("'"+ proxyDisinfectionSent +"'") : "null", + StringUtils.isNotBlank(comboTousseDefinitionName) ? ("'"+ comboTousseDefinitionName +"'") : "null", + tousseInstance.getId() + )); + //objectDao.update(tousseInstance); } + //由于器械包实例数量较多,单个单个的处理总时间会比较长,现调整成批量处理.减少总时间 + if(sqls.length() > 0){ + objectDao.excuteSQL(sqls.toString()); + } // if (!tousseInstanceIDs.isEmpty()) { // String ids = SqlUtils // .joinToWhereInConditionForNonStringProperties(tousseInstanceIDs);