Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java =================================================================== diff -u -r27414 -r27467 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 27414) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 27467) @@ -823,9 +823,10 @@ *@param sqlStatus 查询条件的状态 举例格式:and status="已审核" * @param paramsName 需要获取包实例的什么参数 * @param searchNum 查询条数 当参数type=1时,无效 + * @param inBarcodeList 查询的条码在这些条码中 * @return */ - List getTousseInsDataByFixedBarcode(String fixedBarcode,String barcodes ,String sqlStatus,String paramsName,int type, Integer searchNum); + List getTousseInsDataByFixedBarcode(String fixedBarcode,String barcodes ,String sqlStatus,String paramsName,int type, Integer searchNum, List inBarcodeList); /** * 根据包定义获取包实例集合(只有id和条码) * @param td 包定义 @@ -1027,6 +1028,11 @@ public String getSterilingModeNotTheSameNoticeMessage(String module , Long sterilizationRecordId , String sterilingContainerBarcode , List willBeLoadedTousseInstanceList , List scanBarcodes); - + /** + * 获取条码对应的包实例状态map + * @param barcodes + * @return key:条码 value:包实例状态 + */ + public Map> getStatusAndBarcodeMap(List barcodes); } Index: ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordForm.js =================================================================== diff -u -r27442 -r27467 --- ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordForm.js (.../sterilizationRecordForm.js) (revision 27442) +++ ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/sterilizationRecordForm.js (.../sterilizationRecordForm.js) (revision 27467) @@ -902,7 +902,7 @@ } } }); - if(i==0){//没有在右边匹配到对应的条码 + if(i==0 && editType==2){//没有在右边匹配到对应的条码 var rootNode = sterilizationColumnTree.getRootNode(); var j =0 //循环左边的节点 @@ -2181,45 +2181,24 @@ var oldAmount = parseInt(oldValue) var reg = new RegExp("^[0-9]*$"); var stockAmount = parseInt(editNode.attributes.stockAmount) - //修改失败后调用 - var updateFail=function roleBack(){ - //克隆修改前的数据 - var isParentNode = editNode.attributes.isParentNode; - var typeForSterilizationStatistics = editNode.attributes.typeForSterilizationStatistics; - var department = editNode.attributes.depart; - var position = editNode.attributes.position ; - var amount = editNode.attributes.amount ; - var reviewTime = editNode.attributes.reviewTime ; - var stockAmount = editNode.attributes.stockAmount ; - - var rootNode = sterilizationColumnTree.getRootNode(); - var parentNode = createNode(true, barcode, name, typeForSterilizationStatistics, department, '器械包', position, oldValue, reviewTime,stockAmount); - var firstChildNode = rootNode.item(0); - editNode.remove();//删除修改后的节点数据 - rootNode.appendChild(parentNode);//追加修改前的数据 - sterilizationRecordWin.getEl().unmask();//关闭进度条 + if(top.Ext.getCmp('endDate').getValue() != ''){ + showResult("已灭菌的记录不能修改数量", null , sstsConfig.messagePauseTimeOnSterilizationRecordPage); + sterilizationRecordWin.getEl().unmask(); + return false; } if(!reg.test(newValue)){ showResult("请输入数字", null , sstsConfig.messagePauseTimeOnSterilizationRecordPage); - updateFail() - return; + sterilizationRecordWin.getEl().unmask(); + return false; } if(newValue==0){ showResult("请输入大于0的数字", null , sstsConfig.messagePauseTimeOnSterilizationRecordPage); - updateFail() - return; + sterilizationRecordWin.getEl().unmask(); + return false; } var stockAmount = editNode.attributes.stockAmount ; var rigthAmount = getRigthFixedBarcodeAmount(barcode) if(newAmount>oldAmount){//如果是增加数量 - var count = newAmount - oldAmount - if(rigthAmount list = getTousseInsDataByFixedBarcode(tousseSimpleVO.getBarcode(), "", " and status='"+TousseInstance.STATUS_REVIEWED+"' ", "barcode", 1,null); + List list = getTousseInsDataByFixedBarcode(tousseSimpleVO.getBarcode(), "", " and status='"+TousseInstance.STATUS_REVIEWED+"' ", "barcode", 1,null,null); for (String bStr : list) { bList.add(bStr); } @@ -5102,10 +5102,13 @@ throw new RuntimeException("tousseName 或 barcodes为空"); } - List barcodeList =getTousseInsDataByFixedBarcode(fixedBarcode,barcodes," and status = '"+TousseInstance.STATUS_REVIEWED+"'","barcode",0,addAmount); + List barcodeList =getTousseInsDataByFixedBarcode(fixedBarcode,barcodes," and status = '"+TousseInstance.STATUS_REVIEWED+"'","barcode",0,addAmount,null); if(barcodeList.size()==0){ return ""; } + if(addAmount > barcodeList.size()){ + throw new RuntimeException("剩余库存为"+ barcodeList.size()); + } String resultStr=""; for(int i =0;i barcodeList =getTousseInsDataByFixedBarcode(fixedBarcode,"",sqlStatus,"barcode",0,null); + List barcodeList =getTousseInsDataByFixedBarcode(fixedBarcode,"",sqlStatus,"barcode",0,null,oldBarcodesList); //筛选符合删除条件的条码 - oldBarcodesList.retainAll(barcodeList); + //oldBarcodesList.retainAll(barcodeList); //页面上已扫描的条码转成List ArrayList arrayList = new ArrayList(Arrays.asList(oldBarcodes)); if(oldBarcodesList.size()>=subtractionAmount){ - List delList = new ArrayList(); + //List delList = new ArrayList(); //移除数据 + //先移除已审核的,然后灭菌中的,然后才是其他的 + Map> statusMap = getStatusAndBarcodeMap(oldBarcodesList); + if(CollectionUtils.isNotEmpty(statusMap.get(TousseInstance.STATUS_REVIEWED))){ + List reviewedList = statusMap.get(TousseInstance.STATUS_REVIEWED); + for (int i = 0; i < reviewedList.size(); i++) { + if(subtractionAmount == 0){ + break; + } + removeListByKey(arrayList,reviewedList.get(i)); + subtractionAmount--; + } + } + if(CollectionUtils.isNotEmpty(statusMap.get(TousseInstance.STATUS_STERILING))){ + List sterilingList = statusMap.get(TousseInstance.STATUS_STERILING); + for (int i = 0; i < sterilingList.size(); i++) { + if(subtractionAmount == 0){ + break; + } + removeListByKey(arrayList,sterilingList.get(i)); + subtractionAmount--; + } + } for(int i=0;i> getStatusAndBarcodeMap(List barcodes) { + ResultSet rs = null; + Map> resultMap = new HashMap>(); + try { + String sql = String.format("select status,barcode from %s ti inner join %s bd on bd.id=ti.id where %s", + TousseInstance.class.getSimpleName(),BarcodeDevice.class.getSimpleName(),SqlUtils.getStringFieldInLargeCollectionsPredicate("bd.barcode", barcodes)); + rs = objectDao.executeSql(sql); + while(rs.next()){ + String status = rs.getString("status"); + String barcode = rs.getString("barcode"); + List barcodesOfMap = null; + if(resultMap.containsKey(status)){ + barcodesOfMap = resultMap.get(status); + }else{ + barcodesOfMap = new ArrayList(); + resultMap.put(status, barcodesOfMap); + } + barcodesOfMap.add(barcode); + } + } catch (SQLException e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return resultMap; + } /** * 根据条码判断是否为固定条码,如果是则返回tousseDefinition_id(包定义ID),如果不是则返回空字符串 @@ -5564,7 +5615,7 @@ */ @Override @SuppressWarnings("unused") - public List getTousseInsDataByFixedBarcode(String fixedBarcode,String barcodes ,String sqlStatus,String paramsName,int type, Integer searchNum){ + public List getTousseInsDataByFixedBarcode(String fixedBarcode,String barcodes ,String sqlStatus,String paramsName,int type, Integer searchNum, List inBarcodeList){ TousseDefinition td = tousseDefinitionManager.getTousseDefinitionByFixedBarcode(fixedBarcode); if(td == null){ return new ArrayList(); @@ -5589,6 +5640,12 @@ rownum =" and rownum <= "+searchNum; } } + String inBarcodeSql = null; + if(CollectionUtils.isNotEmpty(inBarcodeList)){ + inBarcodeSql = SqlUtils.getStringFieldInLargeCollectionsPredicate(" bd.barcode", inBarcodeList); + }else{ + inBarcodeSql = ""; + } StringBuffer barcodesSql = new StringBuffer(); if(StringUtils.isNotBlank(barcodes)){ if(barcodes.indexOf("','") == -1){ @@ -5856,7 +5913,7 @@ } //如果不够扫描加载数量,则去已审核的包里面取 if(td.getScanAmount()>sterilizationBarcodesList.size()){ - barcodeList = getTousseInsDataByFixedBarcode(fixedBarcode,barcodes," and status = '"+TousseInstance.STATUS_REVIEWED+"'","barcode",1,null); //库存 + barcodeList = getTousseInsDataByFixedBarcode(fixedBarcode,barcodes," and status = '"+TousseInstance.STATUS_REVIEWED+"'","barcode",1,null,null); //库存 for(int j=0;j barcodeList =tousseInstanceManager.getTousseInsDataByFixedBarcode(finxedBarcode,""," and status = '"+TousseInstance.STATUS_REVIEWED+"'","barcode",0,null); + List barcodeList =tousseInstanceManager.getTousseInsDataByFixedBarcode(finxedBarcode,""," and status = '"+TousseInstance.STATUS_REVIEWED+"'","barcode",0,null,null); if(!tousseInstanceManager.equalsBarcode(finxedBarcode)){ JSONObject jSONObj = JSONUtil.buildJsonObject(false, "只有扫描固定条码才能修改数量"); StrutsResponseUtils.output(jSONObj); @@ -1886,7 +1886,7 @@ */ public void getTousseInsAmountByBarcode(){ String barcode = StrutsParamUtils.getPraramValue("fixedBarcode", ""); - List barcodeList =tousseInstanceManager.getTousseInsDataByFixedBarcode(barcode,""," and status = '"+TousseInstance.STATUS_REVIEWED+"'","barcode",0,null); + List barcodeList =tousseInstanceManager.getTousseInsDataByFixedBarcode(barcode,""," and status = '"+TousseInstance.STATUS_REVIEWED+"'","barcode",0,null,null); JSONObject jSONObj = JSONUtil.buildJsonObject(true, barcodeList.size()+""); StrutsResponseUtils.output(jSONObj); } @@ -1915,7 +1915,7 @@ StrutsResponseUtils.output(jSONObj); }catch(Exception e){ e.printStackTrace(); - JSONObject jSONObj = JSONUtil.buildJsonObject(true, e.getMessage()); + JSONObject jSONObj = JSONUtil.buildJsonObject(false, e.getMessage()); StrutsResponseUtils.output(jSONObj); } }