Index: ssts-idcard/src/main/java/com/forgon/disinfectsystem/idcardinstance/util/IDCardInstanceUtils.java =================================================================== diff -u -r13962 -r13963 --- ssts-idcard/src/main/java/com/forgon/disinfectsystem/idcardinstance/util/IDCardInstanceUtils.java (.../IDCardInstanceUtils.java) (revision 13962) +++ ssts-idcard/src/main/java/com/forgon/disinfectsystem/idcardinstance/util/IDCardInstanceUtils.java (.../IDCardInstanceUtils.java) (revision 13963) @@ -5,8 +5,6 @@ package com.forgon.disinfectsystem.idcardinstance.util; import java.text.SimpleDateFormat; -import java.util.Collections; -import java.util.Comparator; import java.util.Date; import java.util.List; Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java =================================================================== diff -u -r13882 -r13963 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 13882) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/service/RecyclingRecordManagerImpl.java (.../RecyclingRecordManagerImpl.java) (revision 13963) @@ -869,6 +869,16 @@ PackingTask task = packingManager.getUnfinishedTask( recyclingRecord.getId(), basketBarcode, tousseDefinitionID, PackingTask.TASK_RECYCLINGRECORD); + + IDCardInstance idCardInstance = null; + TousseInstance idCardTousseInstance = null; + if(StringUtils.isNotBlank(idCardBarcode)){ + idCardInstance = idCardInstanceManager.getIDCardInstanceByBarcode(idCardBarcode); + if(idCardInstance != null){ + idCardTousseInstance = IDCardInstanceUtils.getLastOperatedTousseInstance(objectDao, idCardInstance); + } + } + //已装配 if (task == null && amount < 0) { throw new RuntimeException(tousseName + "已装配,不能修改!"); @@ -886,6 +896,7 @@ if (task.getId() != null && task.getUnPackAmount() != null && task.getUnPackAmount() + amount == 0) { packingManager.delete(task); + setIDCardTousseInstanceBeforeRecycleStatus(idCardTousseInstance); continue; } task.setStartTime(new Date()); @@ -909,33 +920,27 @@ task.setDepartment(recyclingRecord.getDepart()); packingManager.saveOrUpdate(task); - //标志牌处理 + //标识牌处理 if(StringUtils.isNotBlank(idCardBarcode)){ - IDCardInstance idCard = idCardInstanceManager.getIDCardInstanceByBarcode(idCardBarcode); - IDCardInfoForPackingTask idCardTask = null; - if(idCard != null){ - TousseInstance ti = IDCardInstanceUtils.getLastOperatedTousseInstance(objectDao, idCard); - if (ti != null - && (TousseInstance.STATUS_SHIPPED.equals(ti - .getStatus()) - || TousseInstance.STATUS_USED.equals(ti - .getStatus()) || TousseInstance.STATUS_SIGNED - .equals(ti.getStatus()))) { - ti.setStatus(TousseInstance.STATUS_RECYCLED); - } - idCardTask = packingManager.getIDCardForPackingTask(idCard.getId(),task.getId()); + if(idCardInstance != null){ + IDCardInfoForPackingTask idCardPackingTask = packingManager.getIDCardForPackingTask(idCardInstance.getId(),task.getId()); if (amount > 0) { - if (idCardTask != null) { - idCardTask.validateAssociatedInfo(); + if (idCardPackingTask != null) { + idCardPackingTask.validateAssociatedInfo(); } else { - idCardTask = new IDCardInfoForPackingTask(); + idCardPackingTask = new IDCardInfoForPackingTask(); } - idCardTask.setIdCardInstanceID(idCard.getId()); - idCardTask.setPackingTaskID(task.getId()); - packingManager.saveOrUpdate(idCardTask); + idCardPackingTask.setIdCardInstanceID(idCardInstance.getId()); + idCardPackingTask.setPackingTaskID(task.getId()); + //包实例改成已回收状态 + setIDCardTousseInstanceRecycledStatus(idCardTousseInstance); + packingManager.saveOrUpdate(idCardPackingTask); } else { - if (idCardTask != null) { - packingManager.delete(idCardTask); + if (idCardPackingTask != null) { + setIDCardTousseInstanceBeforeRecycleStatus(idCardTousseInstance); + packingManager.delete(idCardPackingTask); + }else{ + throw new RuntimeException("标识牌条码为"+idCardBarcode+"的器械包已装配,不能删除!"); } } }else{ @@ -948,6 +953,32 @@ setRecyclingErrorAndDamagePackingTaskId(recyclingRecord,idToTDMap,confirmation); } + private void setIDCardTousseInstanceRecycledStatus(TousseInstance lastOperatedTousseInstance) { + if (lastOperatedTousseInstance != null) { + String instanceStatus = lastOperatedTousseInstance.getStatus(); + if((TousseInstance.STATUS_SHIPPED.equals(instanceStatus) + || TousseInstance.STATUS_USED.equals(instanceStatus) || TousseInstance.STATUS_SIGNED + .equals(instanceStatus))){ + lastOperatedTousseInstance.setStatus(TousseInstance.STATUS_RECYCLED); + } + } + } + + /** + * 删除后将标识牌状态改为回收前的状态 + * @param lastOperatedTousseInstance + */ + private void setIDCardTousseInstanceBeforeRecycleStatus(TousseInstance lastOperatedTousseInstance){ + //删除后把标识牌的实例状态改回去 + if(lastOperatedTousseInstance != null && TousseInstance.STATUS_RECYCLED.equals(lastOperatedTousseInstance.getStatus())){ + String status = CssdUtils.getBeforeRecycleTousseStatus(lastOperatedTousseInstance); + if(StringUtils.isBlank(status)){ + throw new RuntimeException("条码为"+lastOperatedTousseInstance.getBarcode()+"的器械包状态异常!"); + } + lastOperatedTousseInstance.setStatus(status); + } + } + private void setRecyclingErrorAndDamagePackingTaskId(RecyclingRecord records,Map idToTDMap,boolean confirmation) { for (TousseItem item : records.getItems()) { Long historyPackingTaskId = item.getHistoryPackingTaskId(); Index: ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/action/RecyclingRecordAction.java =================================================================== diff -u -r13962 -r13963 --- ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/action/RecyclingRecordAction.java (.../RecyclingRecordAction.java) (revision 13962) +++ ssts-recyclingrecord/src/main/java/com/forgon/disinfectsystem/recyclingrecord/action/RecyclingRecordAction.java (.../RecyclingRecordAction.java) (revision 13963) @@ -776,18 +776,24 @@ } } else { - if (TousseInstance.STATUS_SHIPPED - .equals(tousseInstance.getStatus()) - || TousseInstance.STATUS_USED - .equals(tousseInstance.getStatus()) - || TousseInstance.STATUS_DISCARD - .equals(tousseInstance.getStatus()) - || TousseInstance.STATUS_SIGNED - .equals(tousseInstance.getStatus())) { - } else { - tousseInstance = null; - errorMessage = "器械包必须是已发货、已使用或已签收的状态 !"; + String status = tousseInstance.getStatus(); + boolean isVerificationTousseStatus = true; + if (StringUtils.isNotBlank(recyclingRecordId)) { + boolean isRecycled = beCleanItemManager.isIDCardRecycled(recyclingRecordId, barcode); + if(isRecycled){ + isVerificationTousseStatus = false; + } } + if(isVerificationTousseStatus){ + if (TousseInstance.STATUS_SHIPPED.equals(status) + || TousseInstance.STATUS_USED.equals(status) + || TousseInstance.STATUS_DISCARD.equals(status) + || TousseInstance.STATUS_SIGNED.equals(status)) { + } else { + errorMessage = "器械包必须是已发货、已使用或已签收的状态,该包当前状态为:" + status; + tousseInstance = null; + } + } } idCardUseAmount = idCardInstance.getUseAmount(); if( tousseInstance != null ) Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r13940 -r13963 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 13940) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 13963) @@ -272,22 +272,26 @@ @Override public void delete(PackingTask task) { - String description = "删除装配任务[id:" - + task.getId() + ",名称:" + task.getTousseDefinition().getName() - + ",数量:" + task.getAmount() + "]"; - objectDao.delete(task); - appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_PACKING, - Log.TYPE_DELETE, description); - // 删除相关的 if (task != null) { - Long taskID = task.getId(); + String tousseName = ""; + if(task.getTousseDefinition() != null){ + tousseName = task.getTousseDefinition().getName(); + } + String description = "删除装配任务[id:" + task.getId() + ",名称:" + tousseName + + ",数量:" + task.getAmount() + "]"; + + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_PACKING, + Log.TYPE_DELETE, description); + + // 删除相关的 @SuppressWarnings("unchecked") - List idCards = objectDao.findByProperty(IDCardInfoForPackingTask.class.getSimpleName(), "packingTaskID", "" + taskID); + List idCards = objectDao.findByProperty(IDCardInfoForPackingTask.class.getSimpleName(), "packingTaskID", "" + task.getId()); if(idCards != null){ for (IDCardInfoForPackingTask idCard : idCards) { objectDao.delete(idCard); } } + objectDao.delete(task); } } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedata/becleanitem/service/BeCleanItemManagerImpl.java =================================================================== diff -u -r13761 -r13963 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedata/becleanitem/service/BeCleanItemManagerImpl.java (.../BeCleanItemManagerImpl.java) (revision 13761) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedata/becleanitem/service/BeCleanItemManagerImpl.java (.../BeCleanItemManagerImpl.java) (revision 13963) @@ -1071,4 +1071,19 @@ } } + @Override + public boolean isIDCardRecycled(String recyclingRecordId,String idCardBarcode) { + if(StringUtils.isNotBlank(recyclingRecordId) && StringUtils.isNotBlank(idCardBarcode)){ + String sql = String.format("where po.recyclingRecordId = %s and po.idCardBarcode = '%s'", recyclingRecordId,idCardBarcode); + @SuppressWarnings("unchecked") + List items = objectDao.findBySql(ClassifiedItem.class.getSimpleName(), sql); + if(items != null && items.size() > 0){ + return true; + }else{ + return false; + } + } + return false; + } + } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/common/CssdUtils.java =================================================================== diff -u -r13853 -r13963 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/common/CssdUtils.java (.../CssdUtils.java) (revision 13853) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/common/CssdUtils.java (.../CssdUtils.java) (revision 13963) @@ -47,6 +47,24 @@ private static Properties prop = null; + /** + * 获取回收之前器械包状态 + * @param tousseInstance + * @return + */ + public static String getBeforeRecycleTousseStatus(TousseInstance tousseInstance){ + if(tousseInstance != null){ + if(tousseInstance.getUseRecord_id() != null){ + return TousseInstance.STATUS_USED; + }else if(StringUtils.isNotBlank(tousseInstance.getSignedUser())){ + return TousseInstance.STATUS_SIGNED; + }else if(tousseInstance.getInvoice_id() != null){ + return TousseInstance.STATUS_SHIPPED; + } + } + return null; + } + public static JSONObject getGoodsNameAndSp(String materialName){ JSONObject obj = new JSONObject(); if(StringUtils.isNotBlank(materialName)){ Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedata/becleanitem/service/BeCleanItemManager.java =================================================================== diff -u -r13549 -r13963 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedata/becleanitem/service/BeCleanItemManager.java (.../BeCleanItemManager.java) (revision 13549) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedata/becleanitem/service/BeCleanItemManager.java (.../BeCleanItemManager.java) (revision 13963) @@ -75,6 +75,8 @@ public ClassifiedItem getClassifiedItem(String basketId, String recyclingRecordId, String name); + public boolean isIDCardRecycled(String recyclingRecordId,String idCardBarcode); + public void setClassifiedItemPackingAmount(Long sourceId, String basketBarcode, String tousseName, int packingAmount, int unPackAmount); Index: ssts-web/src/main/webapp/disinfectsystem/touchScreen/recycle/recycleForTouchScreen.js =================================================================== diff -u -r13962 -r13963 --- ssts-web/src/main/webapp/disinfectsystem/touchScreen/recycle/recycleForTouchScreen.js (.../recycleForTouchScreen.js) (revision 13962) +++ ssts-web/src/main/webapp/disinfectsystem/touchScreen/recycle/recycleForTouchScreen.js (.../recycleForTouchScreen.js) (revision 13963) @@ -251,7 +251,7 @@ if(recyclingErrorJsonArrayStr != ""){ var recyclingErrorJsonArray = JSON.parse(recyclingErrorJsonArrayStr); for(var j = 0;j < recyclingErrorJsonArray.length;j++) { - if(recyclingErrorJsonArray[j].materialName == '器械包标识牌'){ + if(recyclingErrorJsonArray[j].materialName == '器械包标识牌'){ var intoBasketAmount = parseInt(recyclingErrorJsonArray[j].intoBasketAmount); recyclingErrorJsonArray[j].intoBasketAmount = intoBasketAmount - parseInt(amount); $('#recyclingError'+i).val(JSON.stringify(recyclingErrorJsonArray)); @@ -851,9 +851,6 @@ if(msg.tousseInstance.locationForDisplay != null && msg.tousseInstance.locationForDisplay != '' && $('#depart').attr('value') != msg.tousseInstance.locationForDisplay){ alertDiv('该器械包不属于该科室。'); - }else if(msg.tousseInstance.status != shipped && msg.tousseInstance.status != used - && msg.tousseInstance.status != discard && msg.tousseInstance.status != signed){ - alertDiv('该器械包未发货,不能回收。'); }else{ var ti = msg.tousseInstance; var td = ti.tousseDefinition;