Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java =================================================================== diff -u -r17054 -r17305 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 17054) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManagerImpl.java (.../TousseDefinitionManagerImpl.java) (revision 17305) @@ -1371,6 +1371,32 @@ return null; } + public TousseDefinition getTousseDefinitionByNameAndTousseTypeForDisplay(String name, + String tousseType){ + + String sql = " where po.name = '" + name + "'"; + if (tousseType.contains(";")) { + // 多种状态 + String[] tousseTypes = tousseType.split(";"); + sql += " and ("; + for (String type : tousseTypes) { + sql += " po.tousseType = '" + type + "' or"; + } + sql = sql.substring(0, sql.length() - 2); + sql += ")"; + } else { + sql += " and po.tousseType = '" + tousseType + "'"; + } + sql += " and po.forDisplay=true"; + List list = (List) objectDao + .findBySql(TousseDefinition.class.getSimpleName(), sql); + if (list != null && list.size() > 0) { + return (TousseDefinition) list.get(0); + } + return null; + + } + @Override @SuppressWarnings("unchecked") // 如果有多个匹配的器械包定义,取最新的那个定义 @@ -1499,6 +1525,7 @@ map.put("data", mapList); return map; } + /** * 根据关键字进行检索物品(包括但不限于器械包和一次性物品), @@ -2563,7 +2590,27 @@ return td; } + public TousseDefinition newDisinfectGoodsDefinitionWithoutInvoicePlanId(TousseDefinition ancestorTD){ + JSONArray materialArry = new JSONArray(); + List mis = ancestorTD.getMaterialInstances(); + if(mis != null){ + for (int i = 0; i < mis.size(); i++) { + MaterialInstance ms = mis.get(i); + //跟申请单那里统一,不然相同名称的包定义md5不一致 + if(ms.getCount() <= 0){ + continue; + } + JSONObject obj = new JSONObject(); + obj.put("name",CssdUtils.getMaterialName(ms.getMaterialDefinition())); + obj.put("count", ms.getCount()); + obj.put("tousseType", "器械"); + materialArry.add(obj); + } + } + return newDisinfectGoodsDefinitionWithoutInvoicePlanId(ancestorTD, materialArry); + } + public TousseDefinition newDisinfectGoodsDefinition(TousseDefinition ancestorTD,JSONArray materialItemsJson, Long invoicePlanId) { if(invoicePlanId == null){ throw new RuntimeException("申请单ID不能为空"); Index: ssts-web/src/main/webapp/disinfectsystem/returnGoodsRecord/returnGoodsRecordForm.js =================================================================== diff -u -r16697 -r17305 --- ssts-web/src/main/webapp/disinfectsystem/returnGoodsRecord/returnGoodsRecordForm.js (.../returnGoodsRecordForm.js) (revision 16697) +++ ssts-web/src/main/webapp/disinfectsystem/returnGoodsRecord/returnGoodsRecordForm.js (.../returnGoodsRecordForm.js) (revision 17305) @@ -1482,7 +1482,7 @@ var tousseStore = returnTousseItemStore = new Ext.data.Store({ pageSize: 100, proxy : new Ext.data.HttpProxy({ - url : WWWROOT + '/disinfectSystem/baseData/tousseDefinitionAction!searchInsideTousseData.do', + url : WWWROOT + '/disinfectSystem/baseData/tousseDefinitionAction!searchComboTousseDataForReturnGoods.do', method : 'POST' }), reader : new Ext.data.JsonReader({ @@ -2039,7 +2039,12 @@ var amount = 1; var price = tousseInstance.fluctuationPrice; - + // 如果是固定条码 + var tousseFixedBarcode = tousseInstance.tousseFixedBarcode; + if(!isUndefinedOrNull(tousseFixedBarcode) && tousseFixedBarcode){ + addReturnTousseItemToTree('',tousseName,1,price); + return; + } var departCoding = tousseInstance.settleAccountsDepartCode; var depart = tousseInstance.settleAccountsDepart; if(isUndefinedOrNullOrEmpty(departCoding)){ Index: ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/action/ReturnGoodsRecordAction.java =================================================================== diff -u -r15922 -r17305 --- ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/action/ReturnGoodsRecordAction.java (.../ReturnGoodsRecordAction.java) (revision 15922) +++ ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/action/ReturnGoodsRecordAction.java (.../ReturnGoodsRecordAction.java) (revision 17305) @@ -29,6 +29,7 @@ import com.forgon.directory.model.BarcodeDevice; import com.forgon.disinfectsystem.barcode.service.BarcodeManager; import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; +import com.forgon.disinfectsystem.basedatamanager.toussedefinition.service.TousseInstanceUtils; import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodBatchStockManager; import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodsManager; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; @@ -283,38 +284,38 @@ } else { String tousseType = tousseInstance.getTousseDefinition() .getTousseType(); - if (!TousseDefinition.PACKAGE_TYPE_INSIDE - .equals(tousseType) && !TousseDefinition.PACKAGE_TYPE_DRESSING - .equals(tousseType)) { - - // 验证器械包类型 - //msg = "false#&只能退货普通器械包"; - returnMsg.put("errMsg", "只能退货普通器械包和敷料包"); - } else if (TousseInstance.STATUS_RETURNED - .equals(tousseInstance.getStatus())) { - // 验证是否已退货 - returnMsg.put("errMsg", "["+ tousseInstance.getTousseDefinition() - .getName() + "]已退货!"); -// msg = "false#&[" -// + tousseInstance.getTousseDefinition() -// .getName() + "]已退货!"; - } else if (!tousseInstance.isShippedStatus() && !tousseInstance.isSigned()) { - // 验证是否已发货 - returnMsg.put("errMsg", String.format("%s为 %s状态,不能退货!", tousseInstance.getTousseName(),tousseInstance.getStatus())); -// msg = "false#&[" -// + tousseInstance.getTousseDefinition() -// .getName() + "]未发货!"; - } else { - returnMsg.put("success", true); -// // 设置结算科室 -// String settleAccountsDepart = TousseInstanceUtils.getSettleAccountsDepartFromInvoice(tousseInstance.getId().toString(), objectDao); -// tousseInstance.setSettleAccountsDepart(settleAccountsDepart); - returnMsg.put("tousseInstance", tousseInstance); -// msg = "true#&" -// + tousseInstance.getTousseDefinition() -// .getName() + "#&" -// + tousseInstance.getFluctuationPrice()+"#&"+tousseInstance.getLocation()+"#&"+tousseInstance.getLocationForDisplay(); + boolean isFixedBarcodeTousseInstance = TousseInstanceUtils.isFixedBarcodeTousseInstance(tousseInstance); + + if(!isFixedBarcodeTousseInstance){ + if (!TousseDefinition.PACKAGE_TYPE_INSIDE + .equals(tousseType) && !TousseDefinition.PACKAGE_TYPE_DRESSING + .equals(tousseType) && !TousseDefinition.PACKAGE_TYPE_DISINFECTION + .equals(tousseType)) { + // 验证器械包类型 + throw new RuntimeException("只能退货普通器械包或敷料包或消毒物品"); + } + if (TousseInstance.STATUS_RETURNED + .equals(tousseInstance.getStatus())) { + // 验证是否已退货 + throw new RuntimeException("["+ tousseInstance.getTousseDefinition() + .getName() + "]已退货!"); + } + if (!tousseInstance.isShippedStatus() && !tousseInstance.isSigned()) { + // 验证是否已发货 + throw new RuntimeException(String.format("%s为 %s状态,不能退货!", tousseInstance.getTousseName(),tousseInstance.getStatus())); + } } + + returnMsg.put("success", true); +// // 设置结算科室 +// String settleAccountsDepart = TousseInstanceUtils.getSettleAccountsDepartFromInvoice(tousseInstance.getId().toString(), objectDao); +// tousseInstance.setSettleAccountsDepart(settleAccountsDepart); + returnMsg.put("tousseInstance", tousseInstance); +// msg = "true#&" +// + tousseInstance.getTousseDefinition() +// .getName() + "#&" +// + tousseInstance.getFluctuationPrice()+"#&"+tousseInstance.getLocation()+"#&"+tousseInstance.getLocationForDisplay(); + } } else {} @@ -605,6 +606,8 @@ returnTime = dateFormat.parse(returnTimeStr); } catch (ParseException e1) { } + JSONObject json = null; + try{ if(returnTime == null) returnTime = new Date(); returnGoodsRecord.setReturnTime(returnTime); @@ -632,11 +635,17 @@ returnTousseItem .setTousseName(returnTousseItemDetailArr[1]); TousseDefinition tousseDefinition = tousseDefinitionManager - .getTousseDefinitionByNameAndTousseType( + .getTousseDefinitionByNameAndTousseTypeForDisplay( returnTousseItem.getTousseName(), TousseDefinition.PACKAGE_TYPE_INSIDE + ";" - + TousseDefinition.PACKAGE_TYPE_DRESSING); + + TousseDefinition.PACKAGE_TYPE_DRESSING + + ";" + + TousseDefinition.PACKAGE_TYPE_DISINFECTION); + if(tousseDefinition == null){ + throw new RuntimeException(String.format( + "器械包 %s的包定义已被删除,不能退货!:",returnTousseItem.getTousseName())); + } returnTousseItem.setTousseDefinition(tousseDefinition); returnTousseItem.setAmount(currentAmount); returnTousseItem.setPrice(tousseDefinition.getPrice()); @@ -646,7 +655,7 @@ Double fluctuationPrice = supplyRoomConfigManager.getTousseFluctuationPrice(tousseDefinition.getPrice()); returnTousseItem.setFluctuationPrice(fluctuationPrice); BigDecimal settlementPrice = new BigDecimal(0.00); - // 发货物品统计总价 + // 物品统计总价 settlementPrice = MathTools.mul(fluctuationPrice, currentAmount); returnTousseItem.setSettlementPrice(settlementPrice); returnTousseItem.setIsDelivery("是" @@ -664,8 +673,8 @@ returnTousseItem.setTousseInstanceList(tousseInstances); } } - JSONObject json = null; - try{ + + returnGoodsRecordManager.checkAndSaveForReturnTousse(returnGoodsRecord); json = JSONUtil.buildJsonObject(true, "保存成功"); JSONUtil.addProperty(json, "submit", true); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseInstanceUtils.java =================================================================== diff -u -r17149 -r17305 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseInstanceUtils.java (.../TousseInstanceUtils.java) (revision 17149) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/toussedefinition/service/TousseInstanceUtils.java (.../TousseInstanceUtils.java) (revision 17305) @@ -416,4 +416,15 @@ } return tousseInstance.getDepart(); } + + public static boolean isFixedBarcodeTousseInstance(TousseInstance tousseInstance) { + if(tousseInstance == null){ + return false; + } + Boolean tousseFixedBarcode = tousseInstance.getTousseFixedBarcode(); + if(tousseFixedBarcode == null){ + return false; + } + return tousseFixedBarcode; + } } Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/action/TousseDefinitionAction.java =================================================================== diff -u -r17174 -r17305 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/action/TousseDefinitionAction.java (.../TousseDefinitionAction.java) (revision 17174) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/action/TousseDefinitionAction.java (.../TousseDefinitionAction.java) (revision 17305) @@ -2107,6 +2107,33 @@ } /** + * 搜索器械包(器械包类型为器械包、消毒物品、敷料包),用于退货 + * @return + */ + public void searchComboTousseDataForReturnGoods() { + if (spell == null) { + spell = ""; + } + try { + spell = java.net.URLDecoder.decode(spell, "UTF-8"); + + // 只搜索器械包(包含敷料包和消毒物品) + String[] searchTousseTypeArray = new String[]{TousseDefinition.PACKAGE_TYPE_INSIDE, + TousseDefinition.PACKAGE_TYPE_DRESSING,TousseDefinition.PACKAGE_TYPE_DISINFECTION }; + + List> mapList = tousseDefinitionManager.searchTousseBySimpleCodeAndAnyTousseTypeArr( + spell, searchTousseTypeArray,false); + + Map map = new HashMap(); + map.put("totalCount", mapList.size()); + map.put("data", mapList); + PageUtil.outPutResult(PageUtil.getPagePara(), mapList); + } catch (IOException e) { + e.printStackTrace(); + } + } + + /** * 只查询普通器械包和敷料包 */ public void searchTousseAndDressing() { Index: ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/service/ReturnGoodsRecordManagerImpl.java =================================================================== diff -u -r17149 -r17305 --- ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/service/ReturnGoodsRecordManagerImpl.java (.../ReturnGoodsRecordManagerImpl.java) (revision 17149) +++ ssts-returngoods/src/main/java/com/forgon/disinfectsystem/returngoodsrecord/service/ReturnGoodsRecordManagerImpl.java (.../ReturnGoodsRecordManagerImpl.java) (revision 17305) @@ -824,6 +824,16 @@ saveOrUpdate(returnGoodsRecord); for (ReturnGoodsItem newItem : returnGoodsRecord.getReturnGoodsItems()) { + TousseDefinition tousseDefinition = newItem.getTousseDefinition(); + if (tousseDefinition == null) { + throw new RuntimeException(String.format("未找到%s的包定义!", + newItem.getTousseName())); + } + // 如果是消毒物品,要重新创建包定义 + if(tousseDefinition.isDisinfection()){ + TousseDefinition newTousseDefinition = tousseDefinitionManager.newDisinfectGoodsDefinitionWithoutInvoicePlanId(tousseDefinition); + newItem.setTousseDefinition(newTousseDefinition); + } if (newItem.isRepacking()) { // 更新待装配数量 createPackingTaskForRepacking(returnGoodsRecord, newItem); @@ -838,14 +848,24 @@ .getTousseInstanceList(); if (tousseInstanceList != null) { for (TousseInstance tousseInstance : tousseInstanceList) { + TousseDefinition td = tousseInstance.getTousseDefinition(); + if(td == null){ + throw new RuntimeException(String.format( + "器械包 %s[%s]的包定义已被删除,不能退货!:",tousseInstance.getTousseName(), + tousseInstance.getBarcode())); + } if (tousseInstance.isShippedStatus() || tousseInstance.isSigned() || TousseInstance.STATUS_STERILED .equals(tousseInstance.getStatus())) { if (newItem.isRepacking()) { tousseInstanceManager.discardTousseInstance(tousseInstance, "退货重装"); } else { - tousseInstance - .setStatus(TousseInstance.STATUS_STERILED); + if(td.isDisinfection()){ + tousseInstance.setStatus(TousseInstance.STATUS_DISINFECTED); + }else{ + tousseInstance.setStatus(TousseInstance.STATUS_STERILED); + } + } tousseInstanceManager.saveOrUpdate(tousseInstance); } else { @@ -900,7 +920,7 @@ throw new RuntimeException("申请项的一次性物品id不能为空!"); } }else{ - TousseDefinition td = tousseDefinitionManager.getTousseDefinitionByName(item.getTousseName()); + TousseDefinition td = returnGoodsItem.getTousseDefinition(); if(td != null){ tousseType = td.getTousseType(); item.setTousseDefinitionId(td.getId()); @@ -1337,8 +1357,7 @@ throw new RuntimeException(String.format("%s 退货数量必须大于0!", tousseName)); } - TousseDefinition tousseDefinition = tousseDefinitionManager - .getTousseDefinitionByName(returnGoodsItem.getTousseName()); + TousseDefinition tousseDefinition = returnGoodsItem.getTousseDefinition(); if (tousseDefinition == null) { throw new RuntimeException(String.format("未找到%s的包定义!", returnGoodsItem.getTousseName())); @@ -1355,6 +1374,7 @@ "%s 启用了标识牌,必须全部扫描条码才能退货!", tousseName)); } } + PackingTask packingTask = new PackingTask(); packingTask.setStartTime(new Date()); packingTask.setStatus(PackingTask.STATUS_AWAIT_PACKING); Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java =================================================================== diff -u -r17273 -r17305 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java (.../TousseDefinitionManager.java) (revision 17273) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseDefinitionManager.java (.../TousseDefinitionManager.java) (revision 17305) @@ -152,6 +152,8 @@ public TousseDefinition getTousseDefinitionByNameAndTousseType(String name, String tousseType); + public TousseDefinition getTousseDefinitionByNameAndTousseTypeForDisplay(String name, + String tousseType); public TousseDefinition getTousseDefinitionByLikeNameAndTousseType(String name, String tousseType); @@ -412,6 +414,7 @@ * @return */ public TousseDefinition newDisinfectGoodsDefinitionWithoutInvoicePlanId(TousseDefinition ancestorTD,JSONArray materialItemsJson); + public TousseDefinition newDisinfectGoodsDefinitionWithoutInvoicePlanId(TousseDefinition ancestorTD); /** * 加载所有的聚合包定义,聚合包量比较小,暂时不考虑拼音五笔码检索