Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java =================================================================== diff -u -r14971 -r15049 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java (.../ForeignTousseApplicationManagerImpl.java) (revision 14971) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/foreigntousseapplication/service/ForeignTousseApplicationManagerImpl.java (.../ForeignTousseApplicationManagerImpl.java) (revision 15049) @@ -494,7 +494,7 @@ TousseDefinition tousseDefinition = tousseDefinitionManager .getForeignTousseDefinition(tousseDefinitionId, "" + appid); - // 已存在的外来器械包明细信息 + // 已存在的外来器械包明细信息(干预外来器械保存) if (tousseDefinition != null) { tousseDefinition.setSupplierName(supplierName); tousseDefinition.setName(tousseName); @@ -568,53 +568,83 @@ tousseDefinition.setMaterialInstances(foreignMaterialDefinitions); objectDao.deleteAll(deleteForeignMaterialDefinitions); } else {// 新的外来器械包信息 - tousseDefinition = new TousseDefinition(); - tousseDefinition.setName(tousseName); - tousseDefinition.setInvoicePlanID(appid); - tousseDefinition.setForDisplay(false); - tousseDefinition.setWorkLoadStatisticalMethod(TousseDefinition.WORKLOAD_STATISTICAL_METHOD_MATERIAL_AND_DIPOSABLES); - tousseDefinition.setSupplierName(supplierName); - tousseDefinition.setTousseType(TousseDefinition.PACKAGE_TYPE_FOREIGN); - - tousseDefinition.setTaskGroup(config.getDefalutTaskGroup()); - tousseDefinition.setHandlerDepartCode(config - .getDptCodeOfForeignTousse()); - tousseDefinition.setHandlerDepartName(config - .getDptNameOfForeignTousse()); - tousseDefinition.setSupplierName(supplierName); - tousseDefinition.setIsCleanedEntirely(cleanedEntirely); - tousseDefinition.setIsReview(config.getForeignTousseNeedReview()); - List foreignMaterialDefinitions = new ArrayList(); - - JSONArray materialsJsonArray = obj.optJSONArray("materials"); - for (int n = 0; n < materialsJsonArray.size(); n++) { - JSONObject materialJson = materialsJsonArray.optJSONObject(n); - String materialName = materialJson.optString("materialName"); - Integer amount = materialJson.optInt("amount"); - String includeImplant = materialJson.optString("includeImplant"); - String minDismantleAmount = materialJson.optString("minDismantleAmount"); - MaterialInstance mi = new MaterialInstance(); - mi.setMaterialName(materialName); - mi.setCount(amount); - tousseDefinition.setIncludeImplant(TousseDefinition.INCLUDE_IMPLANT); - mi.setIncludeImplant(includeImplant); - mi.setMinDismantleAmount(minDismantleAmount); - mi.setTousse(tousseDefinition); - MaterialDefinition md = getMaterialDefintion(materialName); - mi.setMaterialDefinition(md); - foreignMaterialDefinitions.add(mi); - } - tousseDefinition.setMaterialInstances(foreignMaterialDefinitions); + tousseDefinition = newForeignTousseDefinition(config, + cleanedEntirely, obj, tousseName, supplierName, appid); } tousseDefinition.setPrice(price==0?config.getForeignToussePrice():price); + + Long parentID = null; + Long ancestorID = null; + //申请单上新添加的包定义 创建一个祖先类包定义 + if(!DatabaseUtil.isPoIdValid(tousseDefinitionId)){ + TousseDefinition ancestorTD = newForeignTousseDefinition(config,cleanedEntirely, obj, tousseName, supplierName, appid); + ancestorTD.setForDisplay(true); + ancestorTD.setInvoicePlanID(null); + tousseDefinitionManager.saveOrUpdate(ancestorTD); + ancestorTD.setParentID(ancestorTD.getId()); + ancestorTD.setAncestorID(ancestorTD.getId()); + parentID = ancestorTD.getId(); + ancestorID = ancestorTD.getId(); + }else{ + TousseDefinition parentTD = tousseDefinitionManager.getTousseDefinitionById(tousseDefinitionId); + if(parentTD == null){ + throw new RuntimeException("ID=" + tousseDefinitionId + "的器械包定义已不存在!"); + } + parentID = parentTD.getId(); + ancestorID = (parentTD.getAncestorID() != null ? parentTD.getAncestorID() : parentTD.getId()); + } + tousseDefinition.setParentID(parentID); + tousseDefinition.setAncestorID(ancestorID); tousseDefinitionManager.saveOrUpdate(tousseDefinition); - tousseDefinition.setAncestorID(tousseDefinition.getId()); - obj.put("tousseDefinitionId", tousseDefinition.getId()); } } + private TousseDefinition newForeignTousseDefinition( + SupplyRoomConfig config, String cleanedEntirely, JSONObject obj, + String tousseName, String supplierName, Long appid) { + TousseDefinition tousseDefinition; + tousseDefinition = new TousseDefinition(); + tousseDefinition.setName(tousseName); + tousseDefinition.setInvoicePlanID(appid); + tousseDefinition.setForDisplay(false); + tousseDefinition.setWorkLoadStatisticalMethod(TousseDefinition.WORKLOAD_STATISTICAL_METHOD_MATERIAL_AND_DIPOSABLES); + tousseDefinition.setSupplierName(supplierName); + tousseDefinition.setTousseType(TousseDefinition.PACKAGE_TYPE_FOREIGN); + + tousseDefinition.setTaskGroup(config.getDefalutTaskGroup()); + tousseDefinition.setHandlerDepartCode(config + .getDptCodeOfForeignTousse()); + tousseDefinition.setHandlerDepartName(config + .getDptNameOfForeignTousse()); + tousseDefinition.setSupplierName(supplierName); + tousseDefinition.setIsCleanedEntirely(cleanedEntirely); + tousseDefinition.setIsReview(config.getForeignTousseNeedReview()); + List foreignMaterialDefinitions = new ArrayList(); + + JSONArray materialsJsonArray = obj.optJSONArray("materials"); + for (int n = 0; n < materialsJsonArray.size(); n++) { + JSONObject materialJson = materialsJsonArray.optJSONObject(n); + String materialName = materialJson.optString("materialName"); + Integer amount = materialJson.optInt("amount"); + String includeImplant = materialJson.optString("includeImplant"); + String minDismantleAmount = materialJson.optString("minDismantleAmount"); + MaterialInstance mi = new MaterialInstance(); + mi.setMaterialName(materialName); + mi.setCount(amount); + tousseDefinition.setIncludeImplant(TousseDefinition.INCLUDE_IMPLANT); + mi.setIncludeImplant(includeImplant); + mi.setMinDismantleAmount(minDismantleAmount); + mi.setTousse(tousseDefinition); + MaterialDefinition md = getMaterialDefintion(materialName); + mi.setMaterialDefinition(md); + foreignMaterialDefinitions.add(mi); + } + tousseDefinition.setMaterialInstances(foreignMaterialDefinitions); + return tousseDefinition; + } + private MaterialDefinition getMaterialDefintion(String materialName) { MaterialDefinition md = materialDefinitionManager.getForeignTousseMaterialDefinition(materialName, null); if(md == null){ Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/SearchTousseDefinitionParams.java =================================================================== diff -u -r14915 -r15049 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/SearchTousseDefinitionParams.java (.../SearchTousseDefinitionParams.java) (revision 14915) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/SearchTousseDefinitionParams.java (.../SearchTousseDefinitionParams.java) (revision 15049) @@ -14,5 +14,6 @@ public String handlerDepartCodes; public String supplierName; public boolean showDisableGoods = false; + public boolean showForeignTousseAncestorDefinition = false; } Index: ssts-web/src/main/webapp/disinfectsystem/foreigntousseapplication/foreignTousseInfoForm.js =================================================================== diff -u -r15000 -r15049 --- ssts-web/src/main/webapp/disinfectsystem/foreigntousseapplication/foreignTousseInfoForm.js (.../foreignTousseInfoForm.js) (revision 15000) +++ ssts-web/src/main/webapp/disinfectsystem/foreigntousseapplication/foreignTousseInfoForm.js (.../foreignTousseInfoForm.js) (revision 15049) @@ -434,14 +434,19 @@ function openForeignTousseForm(id,formType){ + var isShowForeignTousseAncestorDefinitionForApply = getObjValueFromJs('sstsConfig.isShowForeignTousseAncestorDefinitionForApply',false); + var foreignTousseJsonStore = new Ext4.data.Store({ proxy : { type : 'ajax', url : WWWROOT + '/disinfectSystem/baseData/tousseDefinitionAction!getForeignTousseDefinitionNames.do', reader : { type : 'json', root : 'data' - } + }, + extraParams : { + isShowForeignTousseAncestorDefinitionForApply : isShowForeignTousseAncestorDefinitionForApply + } }, fields : [{name : 'id',mapping : 'id'}, {name : 'spelling',mapping : 'spelling'}, Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java =================================================================== diff -u -r14915 -r15049 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java (.../TousseDefinitionManager.java) (revision 14915) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java (.../TousseDefinitionManager.java) (revision 15049) @@ -57,8 +57,6 @@ String tousseType, String handlerDepartCode,boolean showDisableGoods); public JSONObject searchTousseDefinition(SearchTousseDefinitionParams params); - public JSONObject searchForeignTousseDefinition(String simpleSpell); - public JSONObject searchCustomTousseDefinitions(String searchString); public JSONObject searchTousseAndDiposableGoods(String simpleSpell); @@ -273,4 +271,7 @@ */ public void validateCssdServiceDeptsForTousse( String cssdOrgUnitCode,String cssdOrgUnitName, String applyOrgUnitCode,String applyOrgUnitName); + + public List searchTousseDefinitions(String searchString,String tousseType, + String handlerDepartCodes,String supplierName,boolean showDisableGoods,boolean showForeignTousseAncestorDefinition); } Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java =================================================================== diff -u -r15035 -r15049 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 15035) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 15049) @@ -25,6 +25,7 @@ import org.hibernate.Query; import org.hibernate.Session; +import com.forgon.Constants; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.model.BarcodeDevice; import com.forgon.directory.model.CssdHandleTousses; @@ -38,7 +39,6 @@ import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsStock; import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; -import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.goodsstock.GoodsStock; @@ -175,8 +175,10 @@ @Override public boolean delete(TousseDefinition tousseDefinition) { String sql = "where tousseName = '"+tousseDefinition.getName()+"'"; + @SuppressWarnings("unchecked") List tousseInstanceList = objectDao.findBySql(TousseInstance.class.getSimpleName(), sql); if(tousseInstanceList != null && tousseInstanceList.size()>0){ + @SuppressWarnings("unchecked") List tousseItemList = objectDao.findByProperty(TousseItem.class.getSimpleName(), "tousseDefinitionId", tousseDefinition.getId() + ""); if(tousseInstanceList.size() == 1 && (tousseItemList == null || tousseItemList.size() <= 0)){ TousseInstance tousseInstance = tousseInstanceList.get(0); @@ -704,7 +706,6 @@ * 根据拼音码、五笔码获取器械包(内部器械包和自定义器械包)或内部器械包或外来器械包 */ @Override - @SuppressWarnings("unchecked") public JSONObject searchTousseDefinition(String searchString, String tousseType, String handlerDepartCodes,boolean showDisableGoods) { SearchTousseDefinitionParams params = new SearchTousseDefinitionParams(); @@ -715,26 +716,21 @@ return searchTousseDefinition(params); } - // TODO 效率太低,showDisableGoods可以放到sql条件里面,重复包名的处理也可以放到sql条件。数据量大时,内存处理会很慢。 public JSONObject searchTousseDefinition(SearchTousseDefinitionParams params) { String searchString = params.searchString; String tousseType = params.tousseType; String handlerDepartCodes = params.handlerDepartCodes; String supplierName = params.supplierName; boolean showDisableGoods = params.showDisableGoods; + boolean showForeignTousseAncestorDefinition = params.showForeignTousseAncestorDefinition; JSONObject json = null; - List tousseDefinitions = searchTousseDefinitions( - searchString, tousseType, handlerDepartCodes, supplierName); + List tousseDefinitions = searchTousseDefinitions(searchString, tousseType, + handlerDepartCodes, supplierName, showDisableGoods,showForeignTousseAncestorDefinition); List> mapList = new ArrayList>(); for (TousseDefinition tousseDefinition : tousseDefinitions) { - if (!showDisableGoods - && TousseDefinition.STR_YES.equals(tousseDefinition - .getIsDisable())) { - continue; - } String displayName = tousseDefinition.getName(); boolean isDisplayNameExist = false; for (Map map : mapList) { @@ -798,8 +794,8 @@ return json; } - private List searchTousseDefinitions(String searchString, - String tousseType, String handlerDepartCodes,String supplierName) { + public List searchTousseDefinitions(String searchString,String tousseType, + String handlerDepartCodes,String supplierName,boolean showDisableGoods,boolean showForeignTousseAncestorDefinition) { String sql = createQuerySQL(searchString); if (TousseDefinition.PACKAGE_TYPE_INSIDE.equals(tousseType)) {// 内部器械包 @@ -856,10 +852,20 @@ // 包类型不是【外来器械包】时,才增加forDisplay!=0的过滤 if (!TousseDefinition.PACKAGE_TYPE_FOREIGN.equals(tousseType)) { sql += " and po.forDisplay != 0 "; + }else{ + if(showForeignTousseAncestorDefinition){ + sql += " and po.forDisplay != 0 "; + } } + //不显示停用的器械包 + if(!showDisableGoods){ + sql += " and (po.isDisable = '" + Constants.STR_NO + "' or po.isDisable is null) "; + } + sql += " order by " + DatabaseUtil.getSqlLengthFunctionName(dbConnection) + "(po.name) asc,id desc"; + @SuppressWarnings("unchecked") List tousseDefinitions = objectDao.findBySql( TousseDefinition.class.getSimpleName(), sql); return tousseDefinitions; @@ -878,38 +884,6 @@ } /** - * 搜索名称匹配的外来器械包 - */ - @Override - @SuppressWarnings("unchecked") - public JSONObject searchForeignTousseDefinition(String searchString) { - JSONObject json = null; - - List tousseDefinitions = searchTousseDefinitions( - searchString, TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY, null,null); - - List> mapList = new ArrayList>(); - for (TousseDefinition tousseDefinition : tousseDefinitions) { - if(TousseDefinition.STR_YES.equals(tousseDefinition.getIsDisable())){ - continue; - } - Map temp = new HashMap(); - temp.put("id", tousseDefinition.getId()); - temp.put("name", tousseDefinition.getName()); - temp.put("spelling", tousseDefinition.getSpelling()); - temp.put("tousseType", tousseDefinition.getTousseType()); - temp.put("packageType", tousseDefinition.getPackageType()); - temp.put("sterilingMethod", tousseDefinition.getSterilingMethod()); - mapList.add(temp); - } - Map map = new HashMap(); - map.put("totalCount", tousseDefinitions.size()); - map.put("data", mapList); - json = JSONObject.fromObject(map); - return json; - } - - /** * 搜索匹配的器械包(内部器械包和自定义器械包)和一次性物品NAME和ID */ @Override @@ -1041,7 +1015,7 @@ .findBySql(TousseDefinition.class.getSimpleName(), sql, index, amount, null); if (tousseDefinitions != null) { - String handlerDepartCode = AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig(); +// String handlerDepartCode = AcegiHelper.getLoginUser().getOrgUnitCodingFromSupplyRoomConfig(); for (TousseDefinition tousseDefinition : tousseDefinitions) { //不可以在这里这样判断,因为有分页,有可能因为分页导致查询结果中没有目标处理科室的内容,但是实际上是有对应的内容的,只是当前页没有获取到 // if (searchTousseBelonged){ @@ -1086,29 +1060,6 @@ } - /** - * 根据科室编码查询该科室能否处理该器械包 - * @param td 器械包定义 - * @param orgUnitCoding 处理科室编码 - * @return - */ - private boolean getTousseTaskGroupByOrgUnitCode(TousseDefinition td, String orgUnitCoding){ - boolean result = false; - String sql = "select count(0) cnt from CssdHandleTousses ct where ct.tousseDefinitionId = " + td.getAncestorID() + " and orgUnitCode = '" + orgUnitCoding + "'"; - ResultSet rs = null; - try{ - rs = objectDao.executeSql(sql); - if(rs.next() && rs.getInt("cnt") > 0){ - result = true; - } - }catch(Exception e){ - - }finally{ - DatabaseUtil.closeResultSetAndStatement(rs); - } - return result; - } - private List> searchTousseOrDiposableGoodsBySpellAndWbCodeWithStock( String simpleSpell) { List> mapList = new ArrayList>(); @@ -1877,6 +1828,7 @@ return result; } + @SuppressWarnings("unchecked") public List getTousseDefinitionsByName(String name) { String sql = String.format(" where po.name='%s'", name); return objectDao.findBySql(TousseDefinition.class.getSimpleName(), sql); @@ -1953,6 +1905,7 @@ Collection materials = paramTousseDefinition.getMaterialInstances(); // 首先根据包名查出所有的包,然后逐个比对满足条件的,最后找出所有满足条件的id最大的 String sql = String.format(" from %s t inner join fetch t.materialInstances where t.name='%s' and %s ", TousseDefinition.class.getSimpleName(),tousseName,extraSql); + @SuppressWarnings("unchecked") List tousseDefinitions = objectDao.findByHql(sql); if(tousseDefinitions == null || tousseDefinitions.size()==0){ return null; @@ -1980,7 +1933,6 @@ } // 判断器械包的材料是否和传入的是完全一样 private boolean isThisTousseDefinitionMaterialsEqualsOtherMaterials(TousseDefinition tousseDefinition,Collection materials){ - boolean equals = false; int thisMaterialsSize = 0; int otherMaterialsSize = materials.size(); List materialInstances = tousseDefinition.getMaterialInstances(); Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/action/TousseDefinitionAction.java =================================================================== diff -u -r14941 -r15049 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/action/TousseDefinitionAction.java (.../TousseDefinitionAction.java) (revision 14941) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/action/TousseDefinitionAction.java (.../TousseDefinitionAction.java) (revision 15049) @@ -986,6 +986,7 @@ spell = java.net.URLDecoder.decode(spell, "UTF-8"); String supplierName = StrutsParamUtils.getPraramValue("supplierName", ""); + String isShowForeignTousseAncestorDefinitionForApply = StrutsParamUtils.getPraramValue("isShowForeignTousseAncestorDefinitionForApply", "false"); Pattern pat = Pattern.compile("[\\u4E00-\\u9FA5]+");// 匹配中文字符的正则表达式 Matcher m = pat.matcher(spell); if (!m.find()) { @@ -997,6 +998,10 @@ params.handlerDepartCodes = null; params.supplierName = supplierName; params.showDisableGoods = false; + //外来器械申请时显示原始包定义还是显示最近一次申请的包定义 + if("true".equals(isShowForeignTousseAncestorDefinitionForApply)){ + params.showForeignTousseAncestorDefinition = true; + } JSONObject json = tousseDefinitionManager.searchTousseDefinition(params); //外来器械去掉下划线、相同名称的物品取最后一次的包定义 @@ -1290,14 +1295,30 @@ try { spell = java.net.URLDecoder.decode(spell, "UTF-8"); - JSONObject json = tousseDefinitionManager - .searchForeignTousseDefinition(spell); + List tousseDefinitions = tousseDefinitionManager.searchTousseDefinitions( + spell, TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY, null,null,false,false); + + JSONArray data = new JSONArray(); + for (TousseDefinition tousseDefinition : tousseDefinitions) { + JSONObject obj = new JSONObject(); + obj.put("id", tousseDefinition.getId()); + obj.put("name", tousseDefinition.getName()); + obj.put("spelling", tousseDefinition.getSpelling()); + obj.put("tousseType", tousseDefinition.getTousseType()); + obj.put("packageType", tousseDefinition.getPackageType()); + obj.put("sterilingMethod", tousseDefinition.getSterilingMethod()); + data.add(obj); + + } + JSONObject result = new JSONObject(); + result.put("totalCount", data.size()); + result.put("data", data); HttpServletResponse response = StrutsParamUtils.getResponse(); response.setCharacterEncoding("UTF-8"); PrintWriter out; try { out = response.getWriter(); - out.print(json); + out.print(result.toString()); out.close(); } catch (IOException e) { e.printStackTrace(); Index: ssts-web/src/main/webapp/disinfectsystem/config/gdsy/config.js =================================================================== diff -u -r14945 -r15049 --- ssts-web/src/main/webapp/disinfectsystem/config/gdsy/config.js (.../config.js) (revision 14945) +++ ssts-web/src/main/webapp/disinfectsystem/config/gdsy/config.js (.../config.js) (revision 15049) @@ -105,5 +105,7 @@ //是否隐藏同步退货单菜单 hiddSyncGodownReturnEntryMenu : true, //是否隐藏同步材械材料菜单 - hiddSyncHisMaterialDefinitionMenu : true + hiddSyncHisMaterialDefinitionMenu : true, + //外来器械申请时显示原始包定义还是显示最近一次申请的包定义 + isShowForeignTousseAncestorDefinitionForApply : true } \ No newline at end of file