Index: ssts-web/src/main/webapp/disinfectsystem/departmentStock/departmentStockInputForm.js =================================================================== diff -u -r26717 -r26793 --- ssts-web/src/main/webapp/disinfectsystem/departmentStock/departmentStockInputForm.js (.../departmentStockInputForm.js) (revision 26717) +++ ssts-web/src/main/webapp/disinfectsystem/departmentStock/departmentStockInputForm.js (.../departmentStockInputForm.js) (revision 26793) @@ -273,6 +273,7 @@ showResult(action.result.message); } }); + this.enable(); } function cancel() { departmentStockWin.close(); Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r26777 -r26793 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 26777) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 26793) @@ -100,6 +100,7 @@ import com.forgon.disinfectsystem.entity.useRecord.UseRecord; import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectRecord; import com.forgon.disinfectsystem.inventorymanagement.service.WriteBackInventoryHelper; +import com.forgon.disinfectsystem.stockmanage.departmentstock.service.DepartmentStockManager; import com.forgon.disinfectsystem.stockmanage.departmentstock.vo.TousseInstanceVo; import com.forgon.disinfectsystem.tousse.cssdhandletousses.service.CssdHandleTousseManager; import com.forgon.disinfectsystem.tousse.toussedefinition.vo.TousseInstanceExportVo; @@ -179,6 +180,13 @@ private UrgentLevelManager urgentLevelManager; + private DepartmentStockManager departmentStockManager; + + public void setDepartmentStockManager( + DepartmentStockManager departmentStockManager) { + this.departmentStockManager = departmentStockManager; + } + public void setSterilisationManager(SterilisationManager sterilisationManager) { this.sterilisationManager = sterilisationManager; } @@ -6333,7 +6341,17 @@ ResultSet rs = null; JSONArray arr = new JSONArray(); try { - rs = objectDao.executeSql(buildSqlOfGetDepartInventoryInfo(departCoding, wareHouseIds, tousseNames)); + Set queryStockTousseName = new HashSet();//部分盘点时,查询的库存包名 + Set allStockTousseName = new HashSet();//全部盘点时查询的库存包名 + if(StringUtils.isNotBlank(tousseNames)){//部分盘点 + String[] names = tousseNames.split(","); + for (int i = 0; i < names.length; i++) { + queryStockTousseName.add(names[i]); + } + }else{//全部盘点 + allStockTousseName = departmentStockManager.getTousseNameSetByDepartCoding(departCoding); + } + rs = objectDao.executeSql(buildSqlOfGetDepartInventoryInfo(departCoding, wareHouseIds, queryStockTousseName)); JSONObject nameAndItem = new JSONObject(); while(rs.next()){ String tousseName = rs.getString("tousseName"); @@ -6356,13 +6374,22 @@ nameAndItem.put(tousseName, item); } } + Set existingStockTousseName = new HashSet(); if(nameAndItem.size() > 0){ - Set tousseNameSet = nameAndItem.keySet(); - for (String tousseName : tousseNameSet){ + existingStockTousseName = nameAndItem.keySet();//查询到的库存包名 + for (String tousseName : existingStockTousseName){ JSONObject obj = (JSONObject)nameAndItem.get(tousseName); arr.add(obj); } } + Collection nonExistentStockTousseName = null; + //查询的库存-查询到的库存=查询到且不存在的库存 + if(allStockTousseName.size() > 0){//全部盘点 + nonExistentStockTousseName = CollectionUtils.subtract(allStockTousseName, existingStockTousseName); + }else{ + nonExistentStockTousseName = CollectionUtils.subtract(queryStockTousseName, existingStockTousseName);//查询的库存-查询到的库存=查询到且不存在的库存 + } + addTousseOfNonExistentStock(arr, nonExistentStockTousseName); } catch (Exception e) { e.printStackTrace(); }finally { @@ -6371,13 +6398,32 @@ return arr; } /** + * 添加没有科室库存的器械包 + * @param arr 器械包列表数据 + * @param nonExistentStockTousseName 没有科室库存的器械包包名 + */ + private void addTousseOfNonExistentStock(JSONArray arr, Collection nonExistentStockTousseName){ + if(nonExistentStockTousseName.size() > 0){ + for (String tousseName : nonExistentStockTousseName) { + JSONObject item = new JSONObject(); + item.put("tousseName", tousseName); + item.put("amount", 0); + JSONArray ids = new JSONArray(); + item.put("scanIds", ids); + item.put("ids", ids); + item.put("scanAmount", 0); + item.put("diffAmount", 0); + arr.add(item); + } + } + } + /** * 构建getDepartInventoryInfo方法的sql语句 * @param departCoding * @param wareHouseId * @return */ - private String buildSqlOfGetDepartInventoryInfo(String departCoding, String wareHouseIds, String tousseNames){ - Set tousseNamesSet = null; + private String buildSqlOfGetDepartInventoryInfo(String departCoding, String wareHouseIds, Set queryStockTousseName){ String tousseNameSql = ""; String wareHouseIdSql = null; if(wareHouseIds.indexOf("all") != -1){ @@ -6389,13 +6435,8 @@ StringBuffer sbf = new StringBuffer(); wareHouseIdSql = sbf.insert(0, "and wareHouseId in(").append(wareHouseIds).append(")").toString(); } - if(StringUtils.isNotBlank(tousseNames)){ - tousseNamesSet = new HashSet(); - String[] names = tousseNames.split(","); - for (int i = 0; i < names.length; i++) { - tousseNamesSet.add(names[i]); - } - tousseNameSql = String.format(" and %s ", SqlUtils.getStringFieldInLargeCollectionsPredicate("ti.tousseName", tousseNamesSet)); + if(queryStockTousseName.size() > 0){ + tousseNameSql = String.format(" and %s ", SqlUtils.getStringFieldInLargeCollectionsPredicate("ti.tousseName", queryStockTousseName)); } String startDateStr = CssdUtils.getSystemSetConfigByName("startDateOfDepartmentStock"); String endDateStr = null;//结束时间 Index: ssts-stockmanage/src/main/java/com/forgon/disinfectsystem/stockmanage/departmentstock/service/DepartmentStockManager.java =================================================================== diff -u -r26717 -r26793 --- ssts-stockmanage/src/main/java/com/forgon/disinfectsystem/stockmanage/departmentstock/service/DepartmentStockManager.java (.../DepartmentStockManager.java) (revision 26717) +++ ssts-stockmanage/src/main/java/com/forgon/disinfectsystem/stockmanage/departmentstock/service/DepartmentStockManager.java (.../DepartmentStockManager.java) (revision 26793) @@ -5,6 +5,7 @@ import java.util.List; import java.util.Map; +import java.util.Set; import net.sf.json.JSONObject; @@ -53,4 +54,10 @@ * @param tousseDefinition 包定义 */ public void addDepartMentStockByDepartsAndTousseDefinition(JSONObject orgUnitArr, TousseDefinition tousseDefinition); + /** + * 根据科室编码获取该科室库存下的所有包名(目前主要用于盘点时,找到哪些包名无库存) + * @param departCoding + * @return + */ + public Set getTousseNameSetByDepartCoding(String departCoding); } Index: ssts-web/src/main/webapp/disinfectsystem/departmentStock/baseCountInventory.js =================================================================== diff -u -r26777 -r26793 --- ssts-web/src/main/webapp/disinfectsystem/departmentStock/baseCountInventory.js (.../baseCountInventory.js) (revision 26777) +++ ssts-web/src/main/webapp/disinfectsystem/departmentStock/baseCountInventory.js (.../baseCountInventory.js) (revision 26793) @@ -277,29 +277,36 @@ top.Ext.MessageBox.confirm("请确认","是否确认废弃没有盘点成功的器械包?", function(button, text) { if ("yes" == button){ - formObj.form.submit({ - url : WWWROOT + '/disinfectSystem/inventoryRecordAction!saveInventoryRecordOfBaseAmount.do', - method:'POST', - params:{inventoryInfo:JSON.stringify(inventoryListInfo), - wareHouseName : wareHouseName, - wareHouseId : wareHouseId, - departName : departName, - departCoding : departCoding}, - waitMsg:'正在保存数据,请稍候', - waitTitle:'提交表单', - success:function(form,action){ - showResult("保存成功!"); - baseCountInventoryWin.close(); - grid.dwrReload(); - }, - failure:function(form, action){ - showResult(action.result.message); - } - }); + submitForm(inventoryListInfo,wareHouseName,wareHouseId,departName,departCoding); } }); + }else{ + submitForm(inventoryListInfo,wareHouseName,wareHouseId,departName,departCoding); } + } + +function submitForm(inventoryListInfo,wareHouseName,wareHouseId,departName,departCoding){ + formObj.form.submit({ + url : WWWROOT + '/disinfectSystem/inventoryRecordAction!saveInventoryRecordOfBaseAmount.do', + method:'POST', + params:{inventoryInfo:JSON.stringify(inventoryListInfo), + wareHouseName : wareHouseName, + wareHouseId : wareHouseId, + departName : departName, + departCoding : departCoding}, + waitMsg:'正在保存数据,请稍候', + waitTitle:'提交表单', + success:function(form,action){ + showResult("保存成功!"); + baseCountInventoryWin.close(); + grid.dwrReload(); + }, + failure:function(form, action){ + showResult(action.result.message); + } + }); +} function subSet(arr1, arr2) { var subArr = []; for(var i = 0; i < arr1.length; i++){ Index: ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/service/InventoryRecordManagerImpl.java =================================================================== diff -u -r26757 -r26793 --- ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/service/InventoryRecordManagerImpl.java (.../InventoryRecordManagerImpl.java) (revision 26757) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/inventoryrecord/service/InventoryRecordManagerImpl.java (.../InventoryRecordManagerImpl.java) (revision 26793) @@ -2383,6 +2383,8 @@ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String nowDateStr = sdf.format(new Date()); userFullName = String.format("盘点:%s", userFullName); + Collection scanIdSubIds = new ArrayList();//扫描到且未在库存数量里的器械包id + Collection idSubScanIds = new ArrayList();//未扫描到的科室库存里的器械包id for (int i = 0; i < arr.size(); i++) { JSONObject item = (JSONObject)arr.get(i); String tousseName = item.optString("tousseName"); @@ -2401,12 +2403,14 @@ iib.setInventoryRecord(ir); objectDao.save(iib);//保存盘点项 Collection idSubScanId = CollectionUtils.subtract(ids, scanIds); - //废弃未扫描到的科室库存里的器械包信息 - updateTousseOfUnscanned(idSubScanId, userFullName, nowDateStr); + idSubScanIds.addAll(idSubScanId); Collection scanIdSubId = CollectionUtils.subtract(scanIds, ids); - //修改扫描到且未在库存数量里的器械包信息 - updateTousseInfoOfNotInInventoryNum(scanIdSubId, userFullName, nowDateStr); + scanIdSubIds.addAll(scanIdSubId); } + //废弃未扫描到的科室库存里的器械包信息 + updateTousseOfUnscanned(idSubScanIds, userFullName, nowDateStr); + //修改扫描到且未在库存数量里的器械包信息 + updateTousseInfoOfNotInInventoryNum(scanIdSubIds, userFullName, nowDateStr, wareHouseId); } /** * InventoryItemOfBaseNum设置TousseInstances @@ -2430,13 +2434,13 @@ * 修改扫描到且未在库存数量里的器械包信息 * @param scanIdSubId */ - private void updateTousseInfoOfNotInInventoryNum(Collection scanIdSubId, String userFullName, String nowDateStr){ + private void updateTousseInfoOfNotInInventoryNum(Collection scanIdSubId, String userFullName, String nowDateStr, Long wareHouseId){ if(scanIdSubId == null || scanIdSubId.size() < 1){ return; } - objectDao.executeUpdate(String.format("update %s set status='%s',invoiceSender='%s',invoiceSendTime='%s',signedUser='%s',signedDate='%s' where %s", + objectDao.executeUpdate(String.format("update %s set status='%s',invoiceSender='%s',invoiceSendTime='%s',signedUser='%s',signedDate='%s',wareHouseId=%s where %s", TousseInstance.class.getSimpleName(),TousseInstance.STATUS_SIGNED,userFullName,nowDateStr, - userFullName,nowDateStr,SqlUtils.getNonStringFieldInLargeCollectionsPredicate("id", scanIdSubId))); + userFullName,nowDateStr, wareHouseId,SqlUtils.getNonStringFieldInLargeCollectionsPredicate("id", scanIdSubId))); } /** * 废弃未扫描到的科室库存里的器械包信息 Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java =================================================================== diff -u -r26777 -r26793 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 26777) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/service/PackingManagerImpl.java (.../PackingManagerImpl.java) (revision 26793) @@ -5847,7 +5847,11 @@ tousseNameSet.add(tousseName); Map amountMap = tousseInstanceManager.getTousseAmountByGroupStatus(departCoding, tousseNameSet).get(tousseName); //查询已占基数+已使用未回收数量 - Integer existsAmount = amountMap == null?0:amountMap.get("usedCardinalNum") + amountMap.get(TousseInstance.STATUS_USED); + Integer existsAmount = 0; + if(amountMap != null){ + Integer useAmount = amountMap.get(TousseInstance.STATUS_USED) == null?0:amountMap.get(TousseInstance.STATUS_USED); + existsAmount = amountMap.get("usedCardinalNum") + useAmount; + } if(existsAmount >= departmentStock.getCardinalNum()){ throw new RuntimeException(tousseName + "基数数量已达上限,可装配数量为0"); } Index: ssts-stockmanage/src/main/java/com/forgon/disinfectsystem/stockmanage/departmentstock/service/DepartmentStockManagerImpl.java =================================================================== diff -u -r26717 -r26793 --- ssts-stockmanage/src/main/java/com/forgon/disinfectsystem/stockmanage/departmentstock/service/DepartmentStockManagerImpl.java (.../DepartmentStockManagerImpl.java) (revision 26717) +++ ssts-stockmanage/src/main/java/com/forgon/disinfectsystem/stockmanage/departmentstock/service/DepartmentStockManagerImpl.java (.../DepartmentStockManagerImpl.java) (revision 26793) @@ -306,4 +306,27 @@ } return result; } + + @Override + public Set getTousseNameSetByDepartCoding(String departCoding) { + Set tousseNameSet = new HashSet(); + if(StringUtils.isBlank(departCoding)){ + return tousseNameSet; + } + String sql = String.format("select tousseName from %s where departCoding='%s' and tousseDefinition_id is not null", + DepartmentStock.class.getSimpleName(),departCoding); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql); + while (rs.next()) { + String tousseName = rs.getString("tousseName"); + tousseNameSet.add(tousseName); + } + } catch (Exception e) { + e.printStackTrace(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return tousseNameSet; + } }