Index: forgon-tools/src/main/java/com/forgon/tools/json/JSONUtil.java =================================================================== diff -u -r14422 -r14750 --- forgon-tools/src/main/java/com/forgon/tools/json/JSONUtil.java (.../JSONUtil.java) (revision 14422) +++ forgon-tools/src/main/java/com/forgon/tools/json/JSONUtil.java (.../JSONUtil.java) (revision 14750) @@ -2,6 +2,7 @@ import java.io.IOException; import java.text.SimpleDateFormat; +import java.util.Date; import java.util.List; import java.util.Set; @@ -34,6 +35,7 @@ import com.fasterxml.jackson.databind.ser.impl.SimpleBeanPropertyFilter; import com.fasterxml.jackson.databind.ser.impl.SimpleFilterProvider; import com.fasterxml.jackson.datatype.hibernate4.Hibernate4Module; +import com.forgon.tools.date.DateTools; import com.forgon.tools.string.StringTools; import com.google.gson.Gson; import com.google.gson.JsonObject; @@ -334,6 +336,11 @@ } return v; } + public static boolean optBoolean(JSONObject obj, String key, boolean defValue) { + boolean v = obj.optBoolean(key, defValue); + + return v; + } public static Integer optInteger(JSONObject obj, String key, Integer defValue) { Long v = obj.optLong(key, Long.MAX_VALUE); @@ -343,6 +350,12 @@ return v.intValue(); } + public static Date optDate(JSONObject obj, String key, SimpleDateFormat sdf,Date defaultDate) { + String v = optString(obj, key, null); + + return DateTools.parseDateIfNotEmpty(v, sdf, defaultDate); + } + public static JsonObject fromObjecttoJsonObject(Object obj) { return new Gson().toJsonTree(obj).getAsJsonObject(); } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/foreignproxydisinfection/ForeignProxyItem.java =================================================================== diff -u -r14237 -r14750 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/foreignproxydisinfection/ForeignProxyItem.java (.../ForeignProxyItem.java) (revision 14237) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/foreignproxydisinfection/ForeignProxyItem.java (.../ForeignProxyItem.java) (revision 14750) @@ -47,6 +47,8 @@ private Long tousseDefinitionId; // 器械包定义的ID + private Long tousseItemId; + @Id @GeneratedValue(strategy = GenerationType.AUTO) public Long getId() { @@ -143,5 +145,13 @@ public void setTousseDefinitionId(Long tousseDefinitionId) { this.tousseDefinitionId = tousseDefinitionId; } + + public Long getTousseItemId() { + return tousseItemId; + } + + public void setTousseItemId(Long tousseItemId) { + this.tousseItemId = tousseItemId; + } } Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/service/ForeignProxyDisinfectionManagerImpl.java =================================================================== diff -u -r14721 -r14750 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/service/ForeignProxyDisinfectionManagerImpl.java (.../ForeignProxyDisinfectionManagerImpl.java) (revision 14721) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/service/ForeignProxyDisinfectionManagerImpl.java (.../ForeignProxyDisinfectionManagerImpl.java) (revision 14750) @@ -53,8 +53,10 @@ import com.forgon.serialnumber.service.SerialNumManager; import com.forgon.tools.GB2Alpha; import com.forgon.tools.GB2WB; +import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.json.JSONUtil; /** * @@ -297,6 +299,31 @@ return array.toString(); } + public void getPrintInfo(JSONObject jsonObj,JSONObject params){ + Long id = JSONUtil.optLong(params, "id", null); + if(!DatabaseUtil.isPoIdValid(id)){ + throw new RuntimeException("申请单id,不能为空!"); + } + ForeignProxyDisinfection foreignProxyDisinfection = getById(id.toString()); + if(foreignProxyDisinfection == null){ + throw new RuntimeException("未找到申请单!"); + } + boolean printApplication = JSONUtil.optBoolean(params, "printApplication", false); + // 如果点击的装配并打印标签按钮或装配并打印申请单按钮,则对是否打印进行赋值 + if(printApplication && !foreignProxyDisinfection.hasPrinted()){ + foreignProxyDisinfection.setHasPrinted(Constants.STR_YES); + objectDao.update(foreignProxyDisinfection); + } + JSONObject foreignProxyDisinfectionJson = new JSONObject(); + foreignProxyDisinfectionJson.put("id", foreignProxyDisinfection.getId()); + jsonObj.put("foreignProxyDisinfection", foreignProxyDisinfectionJson); + List tousseList = foreignProxyDisinfection.getTousseInstanceList(objectDao); + if(tousseList == null){ + tousseList = new ArrayList(); + } + JSONArray tousseInstancesPrintInfo = buildTousseInstancesPrintInfo(tousseList, foreignProxyDisinfection); + jsonObj.put("tousseList", tousseInstancesPrintInfo); + } @Override public void deleteForeignProxyDisinfection( ForeignProxyDisinfection foreignProxyDisinfection) { @@ -353,7 +380,13 @@ ForeignProxyDisinfection.class.getSimpleName(), "id", Long.valueOf(id)); } + + public ForeignProxyDisinfection getByID_ForUpdate(Long id) { + return (ForeignProxyDisinfection) objectDao.getByID_ForUpdate( + ForeignProxyDisinfection.class.getSimpleName(), id); + } + @Override public void saveOrUpdate(ForeignProxyDisinfection foreignProxyDisinfection) { foreignProxyDisinfection.setSpelling(GB2Alpha.string2Alpha(foreignProxyDisinfection.getDepart())); @@ -386,7 +419,26 @@ } return null; } + + public ForeignProxyItem getForeignProxyItemById(Long id) { + if(id != null){ + return (ForeignProxyItem) objectDao.getByProperty( + ForeignProxyItem.class.getSimpleName(), "id", id); + } + return null; + } + public List getTousseInstances( + Long foreignProxyDisinfectionId) { + if (foreignProxyDisinfectionId != null) { + String sql = String.format(" where po.invoicePlanID=%s", + foreignProxyDisinfectionId); + return (List) objectDao.findBySql( + TousseInstance.class.getSimpleName(), sql); + } + return null; + } + @Override public void saveOrUpdate(ForeignProxyItem foreignProxyItem) { objectDao.saveOrUpdate(foreignProxyItem); @@ -398,7 +450,7 @@ TousseDefinition tousseDefinition, String packageType, String sterilingType, int count, String basketBarcode, Calendar validUntil, Calendar warningUntil, List tousseInstances,Long foreignProxyItemId, - ForeignProxyDisinfection foreignProxyDisinfection,Long tousseItemId) throws Exception { + ForeignProxyDisinfection foreignProxyDisinfection,Long tousseItemId) { int tousseAmount = count; // logger.debug("Thread " + Thread.currentThread().getName() // + " 外部代理灭菌保存,器械包数量=" + tousseAmount); @@ -500,56 +552,22 @@ } - private boolean isTousseItemEqualsForeignProxyItem(TousseItem tousseItem,ForeignProxyItem proxyItem){ - Long appTousseDefinitionId = tousseItem.getTousseDefinitionId(); - Long foreignProxyItemTousseDefinitionId = proxyItem.getTousseDefinitionId(); - boolean equals = false; - if(appTousseDefinitionId != null && appTousseDefinitionId.equals(foreignProxyItemTousseDefinitionId)){ - equals = true;// 优先根据id匹配 - }else if(StringUtils.equals(tousseItem.getTousseName(), proxyItem.getTousseName())){ - equals = true;// 根据名字匹配,兼容旧的数据 + private void setDefaultInfo(ForeignProxyDisinfection foreignProxyDisinfection){ + if(StringUtils.isBlank(foreignProxyDisinfection.getSettleAccountsDepart())){ + foreignProxyDisinfection.setSettleAccountsDepart(foreignProxyDisinfection.getDepart()); } - return equals; - } - @Override - public JSONArray saveProxyDisinfectionWithParam( - ForeignProxyDisinfection foreignProxyDisinfection,String jsonItems,boolean isPackingAndPrint) - throws Exception { - - Map existIdMap = new HashMap(); - List newItems = new ArrayList(); - Map> validUntilAndWarningUntilMap = new HashMap>(); - - bulidForeignProxyItem(jsonItems, existIdMap, newItems,validUntilAndWarningUntilMap); - - if (foreignProxyDisinfection.getId() == null) { - foreignProxyDisinfection - .setDeliverStatus(InvoicePlan.DELIVERSTATUS_AWAITDELIVER); - foreignProxyDisinfection.setOrderByFiled(InvoicePlan.DELIVER_AWAITDELIVER); - foreignProxyDisinfection - .setType(InvoicePlan.TYPE_FOREIGNPROXYDISINFECTION); - foreignProxyDisinfection.setSerialNumber(serialNumManager - .getSerialNumberStr(SerialNum.TYPE_RECYCLINGAPPLICATION)); - foreignProxyDisinfection.setSequence(supplyRoomConfigManager - .getOrgUnitSequence(foreignProxyDisinfection - .getDepartCoding())); - } else { - if (!InvoicePlan.DELIVERSTATUS_AWAITDELIVER - .equals(foreignProxyDisinfection.getDeliverStatus())) { - throw new RuntimeException("只能修改待发货状态的单"); - } - for (ForeignProxyItem proxyItem : foreignProxyDisinfection - .getForeignProxyItems()) { - for (TousseInstance tousseInstance : proxyItem - .getTousseInstanceList(objectDao)) { - if (TousseInstance.STATUS_SHIPPED.equals(tousseInstance - .getStatus())) { - throw new RuntimeException("该单上部分包实例已经发货,不能修改!"); - } - } - } + if(StringUtils.isBlank(foreignProxyDisinfection.getSettleAccountsDepartCoding())){ + foreignProxyDisinfection.setSettleAccountsDepartCoding(foreignProxyDisinfection + .getDepartCoding()); } - + if(StringUtils.isBlank(foreignProxyDisinfection.getHandleDepart())){ + foreignProxyDisinfection.setHandleDepart(AcegiHelper.getCurrentOrgUnitName()); + } + if(StringUtils.isBlank(foreignProxyDisinfection.getHandleDepartCoding())){ + foreignProxyDisinfection.setHandleDepartCoding(AcegiHelper.getCurrentOrgUnitCode()); + } + } + private void validateInfo(ForeignProxyDisinfection foreignProxyDisinfection){ if (StringUtils.isBlank(foreignProxyDisinfection.getDepart()) || StringUtils.isBlank(foreignProxyDisinfection .getDepartCoding())) { @@ -567,13 +585,24 @@ .getHandleDepart())) { throw new RuntimeException("处理科室不能为空!"); } + } + public ForeignProxyDisinfection packForeignProxyDisinfection(ForeignProxyDisinfection modifiedForeignProxyDisinfection,JSONObject params){ - foreignProxyDisinfection.setSubmitTime(new Date()); - deleteForeignProxyItemsAndApplicationTousseItem(foreignProxyDisinfection, - existIdMap); - - foreignProxyDisinfection.getForeignProxyItems().addAll(newItems); + ForeignProxyDisinfection foreignProxyDisinfection = modifiedForeignProxyDisinfection; + Long id = modifiedForeignProxyDisinfection.getId(); + if(DatabaseUtil.isPoIdValid(id)){ + foreignProxyDisinfection = getByID_ForUpdate(modifiedForeignProxyDisinfection.getId()); + if(foreignProxyDisinfection == null){ + throw new RuntimeException("申请单已被删除,不能修改!"); + } + } + if(foreignProxyDisinfection.hasPacked()){ + throw new RuntimeException("申请单已装配,不能再次装配!"); + } + Map> validUntilAndWarningUntilMap = new HashMap>(); + prepareForSave(modifiedForeignProxyDisinfection, params, + foreignProxyDisinfection, validUntilAndWarningUntilMap); //申请物品 List applicationList = foreignProxyDisinfection.getApplicationItems(); if(applicationList == null){ @@ -582,34 +611,25 @@ } List proxyItems = foreignProxyDisinfection.getForeignProxyItems(); - for (ForeignProxyItem proxyItem : proxyItems) { - proxyItem.setForeignProxyDisinfection(foreignProxyDisinfection); - } - // 如果点击的装配并打印标签按钮或装配并打印申请单按钮,则对是否打印进行赋值 - if(isPackingAndPrint){ - foreignProxyDisinfection.setHasPrinted(Constants.STR_YES); - } + + foreignProxyDisinfection.setHasPacked(Constants.STR_YES); + foreignProxyDisinfection.setDeliverStatus(InvoicePlan.DELIVERSTATUS_AWAITDELIVER); + foreignProxyDisinfection.setOrderByFiled(InvoicePlan.DELIVER_AWAITDELIVER); saveOrUpdate(foreignProxyDisinfection); List printTousseInstances = new LinkedList(); for (ForeignProxyItem proxyItem : proxyItems) { - - TousseItem tousseItem = null; - if(proxyItem.getId() != null && existIdMap.get(proxyItem.getId().toString()) != null){ - if(proxyItem.getTousseDefinitionId() != null){ - tousseItem = tousseItemManager.getTousseItem(foreignProxyDisinfection.getId(),proxyItem.getTousseDefinitionId()); - } - } - if(tousseItem == null){ - tousseItem = new TousseItem(); - applicationList.add(tousseItem); - } + TousseItem tousseItem = new TousseItem(); + applicationList.add(tousseItem); +// if(tousseItemId != null){装配之前不会创建tousseItem +// tousseItem = foreignProxyDisinfection.findTousseItemById(tousseItemId); +// } // 器械包定义 TousseDefinition tousseDefinition = tousseDefinitionManager .getTousseDefinitionByNameAndTousseType(proxyItem.getTousseName(), TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY); if (tousseDefinition == null) { - throw new Exception("找不到该器械包[" + proxyItem.getTousseName() + "]基础定义信息!"); + throw new RuntimeException("找不到该器械包[" + proxyItem.getTousseName() + "]基础定义信息!"); } proxyItem.setTousseDefinitionId(tousseDefinition.getId()); @@ -622,35 +642,133 @@ tousseItem.setTousseDefinitionId(tousseDefinition.getId()); tousseItem.setIsTraceable(tousseDefinition.getIsTraceable()); tousseItem.setInvoicePlan(foreignProxyDisinfection); + tousseItem.setInvoicePlanID(foreignProxyDisinfection.getId()); objectDao.saveOrUpdate(tousseItem); + proxyItem.setTousseItemId(tousseItem.getId()); + proxyItem.setInvoicePlanID(foreignProxyDisinfection.getId()); + // 生成包实例 - if(isPackingAndPrint){ - String packageType = proxyItem.getPackageType(); - String sterilingType = proxyItem.getSterilingType(); - List dateList = validUntilAndWarningUntilMap.get(proxyItem.getPackageType()); - if(dateList == null || dateList.size() < 2){ - throw new RuntimeException("有包装类型未设置失效期!"); - } - Calendar validUntil = validUntilAndWarningUntilMap.get(proxyItem.getPackageType()).get(0); - Calendar warningUntil = validUntilAndWarningUntilMap.get(proxyItem.getPackageType()).get(1); - List tousseInstances = new LinkedList(); - createForeignProxyDisinfectionTousseInstances(tousseDefinition, - packageType, sterilingType, proxyItem.getCount(), - proxyItem.getBasketBarcode(), validUntil, warningUntil, - tousseInstances,proxyItem.getId(), - foreignProxyDisinfection,tousseItem.getId()); - if(tousseInstances.isEmpty()){ - throw new RuntimeException("创建包实例失败!"); - } - printTousseInstances.addAll(tousseInstances); + String packageType = proxyItem.getPackageType(); + String sterilingType = proxyItem.getSterilingType(); + List dateList = validUntilAndWarningUntilMap.get(proxyItem.getPackageType()); + if(dateList == null || dateList.size() < 2){ + throw new RuntimeException("有包装类型未设置失效期!"); } + Calendar validUntil = validUntilAndWarningUntilMap.get(proxyItem.getPackageType()).get(0); + Calendar warningUntil = validUntilAndWarningUntilMap.get(proxyItem.getPackageType()).get(1); + List tousseInstances = new LinkedList(); + createForeignProxyDisinfectionTousseInstances(tousseDefinition, + packageType, sterilingType, proxyItem.getCount(), + proxyItem.getBasketBarcode(), validUntil, warningUntil, + tousseInstances,proxyItem.getId(), + foreignProxyDisinfection,tousseItem.getId()); + if(tousseInstances.isEmpty()){ + throw new RuntimeException("创建包实例失败!"); + } + printTousseInstances.addAll(tousseInstances); + } - return buildPrintInfo(printTousseInstances,foreignProxyDisinfection); + return foreignProxyDisinfection; } + private void prepareForSave( + ForeignProxyDisinfection modifiedForeignProxyDisinfection, + JSONObject params, + ForeignProxyDisinfection foreignProxyDisinfection, + Map> validUntilAndWarningUntilMap) { + Map existIdMap = new HashMap(); + String jsonItems = params.getString("itemInfoList"); + List newItems = new ArrayList(); + setDefaultInfo(foreignProxyDisinfection); + bulidForeignProxyItem(jsonItems, existIdMap, newItems, + validUntilAndWarningUntilMap); + if (!DatabaseUtil.isPoIdValid(foreignProxyDisinfection.getId())) {// 新增 + foreignProxyDisinfection + .setType(InvoicePlan.TYPE_FOREIGNPROXYDISINFECTION); + foreignProxyDisinfection.setSerialNumber(serialNumManager + .getSerialNumberStr(SerialNum.TYPE_RECYCLINGAPPLICATION)); + foreignProxyDisinfection.setSequence(supplyRoomConfigManager + .getOrgUnitSequence(foreignProxyDisinfection + .getDepartCoding())); + } else { + copyPropertiesForUpdate(modifiedForeignProxyDisinfection, + foreignProxyDisinfection); + } + Date date = new Date(); + Date applicationTime = JSONUtil.optDate(params, "applicationTimeStr", + Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, date); + Date arrivedTime = JSONUtil.optDate(params, "arrivedTimeStr", + Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, date); + Date scheduleTime = JSONUtil.optDate(params, "scheduleTimeStr", + Constants.SIMPLEDATEFORMAT_YYYYMMDDHHMM, date); + foreignProxyDisinfection.setApplicationTime(applicationTime); + foreignProxyDisinfection.setArrivedTime(arrivedTime); + foreignProxyDisinfection.setScheduleTime(scheduleTime); + validateInfo(foreignProxyDisinfection); + foreignProxyDisinfection.setSubmitTime(new Date()); + // 删除item + deleteForeignProxyItems(foreignProxyDisinfection, existIdMap); + addNewItems(foreignProxyDisinfection, newItems); + } + + private void copyPropertiesForUpdate(ForeignProxyDisinfection modifiedForeignProxyDisinfection,ForeignProxyDisinfection foreignProxyDisinfection){ + foreignProxyDisinfection.setForeignProxyGroup(modifiedForeignProxyDisinfection.getForeignProxyGroup()); +// foreignProxyDisinfection.setDepart(modifiedForeignProxyDisinfection.getDepart()); + foreignProxyDisinfection.setApplicant(modifiedForeignProxyDisinfection.getApplicant()); + foreignProxyDisinfection.setMaker(modifiedForeignProxyDisinfection.getMaker()); + foreignProxyDisinfection.setAssistant(modifiedForeignProxyDisinfection.getAssistant()); + foreignProxyDisinfection.setSterilizer(modifiedForeignProxyDisinfection.getSterilizer()); + foreignProxyDisinfection.setFrequency(modifiedForeignProxyDisinfection.getFrequency()); + foreignProxyDisinfection.setRemark(modifiedForeignProxyDisinfection.getRemark()); + } + // 保存外部代理灭菌单 + public void saveOrUpdateProxyDisinfection(ForeignProxyDisinfection modifiedForeignProxyDisinfection,JSONObject params){ + ForeignProxyDisinfection foreignProxyDisinfection = modifiedForeignProxyDisinfection; + Long id = modifiedForeignProxyDisinfection.getId(); + if(DatabaseUtil.isPoIdValid(id)){ + foreignProxyDisinfection = getByID_ForUpdate(modifiedForeignProxyDisinfection.getId()); + if(foreignProxyDisinfection == null){ + throw new RuntimeException("申请单已被删除!"); + } + } + if(foreignProxyDisinfection.hasPacked()){ + throw new RuntimeException("申请单已装配,不能修改!"); + } + Map> validUntilAndWarningUntilMap = new HashMap>(); + + prepareForSave(modifiedForeignProxyDisinfection, params, + foreignProxyDisinfection, validUntilAndWarningUntilMap); + saveOrUpdate(foreignProxyDisinfection); + + List proxyItems = foreignProxyDisinfection.getForeignProxyItems(); + for (ForeignProxyItem proxyItem : proxyItems) { + // 器械包定义 + TousseDefinition tousseDefinition = tousseDefinitionManager + .getTousseDefinitionByNameAndTousseType(proxyItem.getTousseName(), + TousseDefinition.PACKAGE_TYPE_FOREIGNPROXY); + if (tousseDefinition == null) { + throw new RuntimeException("找不到该器械包[" + proxyItem.getTousseName() + "]基础定义信息!"); + } + proxyItem.setTousseDefinitionId(tousseDefinition.getId()); + proxyItem.setInvoicePlanID(foreignProxyDisinfection.getId()); + objectDao.saveOrUpdate(proxyItem); + } + } + + private List addNewItems( + ForeignProxyDisinfection foreignProxyDisinfection, + List newItems) { + foreignProxyDisinfection.getForeignProxyItems().addAll(newItems); + + List proxyItems = foreignProxyDisinfection.getForeignProxyItems(); + for (ForeignProxyItem proxyItem : proxyItems) { + proxyItem.setForeignProxyDisinfection(foreignProxyDisinfection); + } + return proxyItems; + } private void bulidForeignProxyItem(String jsonItems, - Map existIdMap, + Map existIdMap, List newItems, Map> validUntilAndWarningUntilMap) { if (StringUtils.isNotBlank(jsonItems)) { @@ -660,9 +778,9 @@ for (int i = 0; i < array.size(); i++) { // id,器械包名称,数量,包装类型,灭菌程序 JSONObject obj = array.getJSONObject(i); - String id = obj.optString("id"); + Long id = JSONUtil.optLong(obj, "id", null); String packageType = obj.optString("packageType"); - if ("0".equals(id)) {// 新增 + if (!DatabaseUtil.isPoIdValid(id)) {// 新增 ForeignProxyItem foreignProxyItem = new ForeignProxyItem(); foreignProxyItem.setTousseName(obj.optString("tousseName")); foreignProxyItem.setCount(obj.optInt("count")); @@ -713,7 +831,7 @@ } } - private JSONArray buildPrintInfo(List tousseInstances,ForeignProxyDisinfection foreignProxyDisinfection){ + private JSONArray buildTousseInstancesPrintInfo(List tousseInstances,ForeignProxyDisinfection foreignProxyDisinfection){ JSONArray printParamList = new JSONArray(); for (TousseInstance tousseInstance : tousseInstances) { JSONObject obj = new JSONObject(); @@ -735,33 +853,20 @@ } return printParamList; } - private void deleteForeignProxyItemsAndApplicationTousseItem( + // + private void deleteForeignProxyItems( ForeignProxyDisinfection foreignProxyDisinfection, - Map existIdMap) - throws Exception { + Map existIdMap) { Iterator oldItems = foreignProxyDisinfection .getForeignProxyItems().iterator(); while (oldItems.hasNext()) { ForeignProxyItem item = oldItems.next(); // id,器械包名称,数量,包装类型,灭菌程序 - JSONObject obj = existIdMap.get(item.getId().toString()); + JSONObject obj = existIdMap.get(item.getId()); // 不存在当前记录项,则需要删除 if (obj == null) { oldItems.remove(); - deleteForeignProxyItem(item);// 关联删除器械包实例 - // 删除申请单申请物品 - Iterator tousseItemItr = foreignProxyDisinfection - .getApplicationItems().iterator(); - while (tousseItemItr.hasNext()) { - TousseItem tousseItem = tousseItemItr.next(); - boolean match = isTousseItemEqualsForeignProxyItem(tousseItem, item); - - if (match) { - tousseItem.setInvoicePlan(null); - tousseItemItr.remove(); - tousseItemManager.delete(tousseItem); - } - } + objectDao.delete(item); } } } @@ -911,6 +1016,12 @@ if (list == null || list.size() == 0){ return ; } + for (ForeignProxyDisinfection foreignProxyDisinfection : list) { + if(!foreignProxyDisinfection.hasPrinted()){ + foreignProxyDisinfection.setHasPrinted(Constants.STR_YES); + objectDao.update(foreignProxyDisinfection); + } + } String serialNumber = ""; String applicant = ""; String applicationTime = ""; Index: forgon-tools/src/main/java/com/forgon/tools/StrutsParamUtils.java =================================================================== diff -u -r14181 -r14750 --- forgon-tools/src/main/java/com/forgon/tools/StrutsParamUtils.java (.../StrutsParamUtils.java) (revision 14181) +++ forgon-tools/src/main/java/com/forgon/tools/StrutsParamUtils.java (.../StrutsParamUtils.java) (revision 14750) @@ -1,5 +1,8 @@ package com.forgon.tools; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Date; import java.util.Enumeration; import java.util.HashMap; import java.util.Map; @@ -10,6 +13,7 @@ import org.apache.commons.lang.StringUtils; import org.apache.struts2.ServletActionContext; + import com.forgon.tools.string.StringTools; /** @@ -36,6 +40,23 @@ return paramValue; } + public static Date getDatePraramValue(String paramName, Date defaultValue, + SimpleDateFormat sdf) { + if (StringUtils.isBlank(paramName)) { + return defaultValue; + } + String paramValue = getRequest().getParameter(paramName); + if (StringUtils.isBlank(paramValue)) { + return defaultValue; + } + + try { + return sdf.parse(paramValue); + } catch (ParseException e) { + e.printStackTrace(); + return defaultValue; + } + } public static Long getPraramLongValue(String paramName, Long defaultValue){ if(StringUtils.isBlank(paramName)){ return defaultValue; Index: ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/foreignProxyDisinfectionView.js =================================================================== diff -u -r14699 -r14750 --- ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/foreignProxyDisinfectionView.js (.../foreignProxyDisinfectionView.js) (revision 14699) +++ ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/foreignProxyDisinfectionView.js (.../foreignProxyDisinfectionView.js) (revision 14750) @@ -1495,9 +1495,7 @@ waitMsg : '正在后台进行处理,请稍候', waitTitle : '提交表单', success : function(form, action) { - if(!action.result.failure){ - //打印条码 - //printBarcode(action.result); + if(action.result.success){ showResult("保存成功。"); window.close(); grid.dwrReload(); @@ -1506,7 +1504,11 @@ } }, failure : function(form, action) { - showResult(action.failureType); + if(!isUndefinedOrNullOrEmpty(action.result) && !isUndefinedOrNullOrEmpty(action.result.msg)){ + showResult(action.result.msg); + }else{ + showResult(action.failureType); + } } }); } @@ -1527,14 +1529,14 @@ //获取grid数据 getEditerGridData(); - var submitActionUrl = WWWROOT + '/disinfectSystem/foreignProxyDisinfectionAction!saveForeignProxyDisinfection.do'; + var submitActionUrl = WWWROOT + '/disinfectSystem/foreignProxyDisinfectionAction!packForeignProxyDisinfection.do'; form.form.submit({ url : submitActionUrl, method : 'POST', timeout : 10000000, waitMsg : '正在后台进行处理,请稍候', waitTitle : '提交表单', - params : {isPackingAndPrint :true}, + params : {printTousse :true}, success : function(form, action) { if(action.result.success){ id = action.result.foreignProxyDisinfection.id; @@ -1569,14 +1571,14 @@ //获取grid数据 getEditerGridData(); - var submitActionUrl = WWWROOT + '/disinfectSystem/foreignProxyDisinfectionAction!saveForeignProxyDisinfection.do'; + var submitActionUrl = WWWROOT + '/disinfectSystem/foreignProxyDisinfectionAction!packForeignProxyDisinfection.do'; form.form.submit({ url : submitActionUrl, method : 'POST', timeout : 10000000, waitMsg : '正在后台进行处理,请稍候', waitTitle : '提交表单', - params : {isPackingAndPrint :true}, + params : {printApplication :true}, success : function(form, action) { if(action.result.success){ // 打印申请单 @@ -1644,8 +1646,6 @@ top.Ext.getCmp('assistant').setValue(action.result.data.assistant); if(!action.result.isEditable){ top.Ext.getCmp('saveBtn').disable(); - top.Ext.getCmp('saveAndPrintBtn').disable(); - top.Ext.getCmp('packAndPrintApplicationBtn').disable(); }else{ top.Ext.getCmp('printBtn').disable(); } @@ -1673,8 +1673,8 @@ function disableButtonsAfterPacking(){ top.Ext.getCmp('saveBtn').disable(); - top.Ext.getCmp('saveAndPrintBtn').disable(); - top.Ext.getCmp('packAndPrintApplicationBtn').disable(); +// top.Ext.getCmp('saveAndPrintBtn').disable(); +// top.Ext.getCmp('packAndPrintApplicationBtn').disable(); } function printBarcode(data){ var hospitalName = ""; @@ -1683,15 +1683,15 @@ var applicant = top.Ext.getCmp('applicant').getValue(); var depart = top.Ext.getCmp('depart').getValue(); - if(data.result){ + if(data.tousseList){ var newP = top.Ext.MessageBox.show({ title:'请等待', msg:'打印中……', width:350, progress:true, closable:false }); - var arr = data.result; + var arr = data.tousseList; for(var i=0;i 0){ - foreignProxyDisinfection.setHasPrinted(Constants.STR_YES); - }else{ - foreignProxyDisinfection.setHasPrinted(Constants.STR_NO); - } - } + } Map map = new HashMap(); Index: ssts-web/src/main/webapp/dataUpdater/sqls/4.3.2_4.3.3.sql =================================================================== diff -u -r14726 -r14750 --- ssts-web/src/main/webapp/dataUpdater/sqls/4.3.2_4.3.3.sql (.../4.3.2_4.3.3.sql) (revision 14726) +++ ssts-web/src/main/webapp/dataUpdater/sqls/4.3.2_4.3.3.sql (.../4.3.2_4.3.3.sql) (revision 14750) @@ -1,2 +1,7 @@ update MaterialEntry set totalprice = (select sum(cost*amount) from MaterialEntryItem where materialEntry_id=MaterialEntry.id) where totalPrice is null; -update foreigntousseapplication set suppliername = (select min(i.suppliername) from invoiceplan p,tousseitem i where p.id = i.recyclingapplication_id and foreigntousseapplication.id = p.id); \ No newline at end of file +update foreigntousseapplication set suppliername = (select min(i.suppliername) from invoiceplan p,tousseitem i where p.id = i.recyclingapplication_id and foreigntousseapplication.id = p.id); +update ForeignProxyDisinfection set hasPrinted='是' where (select count(*) from TousseInstance po where po.foreignProxyItem_id in(select fi.id from ForeignProxyItem fi where fi.foreignProxyDisinfection_id=ForeignProxyDisinfection.id ))>0; +update ForeignProxyDisinfection set hasPrinted='否' where hasPrinted!='是'; +update ForeignProxyDisinfection set hasPacked='是' where (select count(*) from TousseInstance po where po.foreignProxyItem_id in(select fi.id from ForeignProxyItem fi where fi.foreignProxyDisinfection_id=ForeignProxyDisinfection.id ))>0 +update ForeignProxyDisinfection set hasPacked='否' where hasPacked!='是'; +update ForeignProxyItem set tousseItemId=(select id from TousseItem where recyclingApplication_ID=ForeignProxyItem.foreignProxyDisinfection_id and tousseDefinitionId=ForeignProxyItem.tousseDefinitionId) where tousseItemId is null; \ No newline at end of file Index: forgon-tools/src/main/java/com/forgon/tools/date/DateTools.java =================================================================== diff -u -r14228 -r14750 --- forgon-tools/src/main/java/com/forgon/tools/date/DateTools.java (.../DateTools.java) (revision 14228) +++ forgon-tools/src/main/java/com/forgon/tools/date/DateTools.java (.../DateTools.java) (revision 14750) @@ -620,4 +620,16 @@ } return result; } + + public static Date parseDateIfNotEmpty(String date, SimpleDateFormat sdf, + Date defaultDate) { + if (StringUtils.isNotBlank(date)) { + try { + return sdf.parse(date); + } catch (ParseException e) { + e.printStackTrace(); + } + } + return defaultDate; + } } Index: ssts-web/src/main/java/com/forgon/disinfectsystem/recall/service/RecallRecordManagerImpl.java =================================================================== diff -u -r14237 -r14750 --- ssts-web/src/main/java/com/forgon/disinfectsystem/recall/service/RecallRecordManagerImpl.java (.../RecallRecordManagerImpl.java) (revision 14237) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/recall/service/RecallRecordManagerImpl.java (.../RecallRecordManagerImpl.java) (revision 14750) @@ -53,6 +53,7 @@ import com.forgon.disinfectsystem.vo.TousseItemVo; import com.forgon.serialnumber.model.SerialNum; import com.forgon.serialnumber.service.SerialNumManager; +import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; @@ -938,8 +939,9 @@ array.add(obj); } try { - foreignProxyDisinfectionManager.saveProxyDisinfectionWithParam( - foreignProxyDisinfection, array.toString(), true); + JSONObject params = new JSONObject(); + params.put("itemInfoList", array.toString()); + foreignProxyDisinfectionManager.packForeignProxyDisinfection(foreignProxyDisinfection, params); } catch (Exception e) { e.printStackTrace(); } Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/service/ForeignProxyDisinfectionManager.java =================================================================== diff -u -r14674 -r14750 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/service/ForeignProxyDisinfectionManager.java (.../ForeignProxyDisinfectionManager.java) (revision 14674) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/service/ForeignProxyDisinfectionManager.java (.../ForeignProxyDisinfectionManager.java) (revision 14750) @@ -43,10 +43,10 @@ public void deleteForeignProxyItem(ForeignProxyItem foreignProxyItem); - public JSONArray saveProxyDisinfectionWithParam(ForeignProxyDisinfection foreignProxyDisinfection,String jsonItems,boolean isPackingAndPrint) - throws Exception; - + public ForeignProxyDisinfection packForeignProxyDisinfection(ForeignProxyDisinfection foreignProxyDisinfection,JSONObject params); + public void saveOrUpdateProxyDisinfection(ForeignProxyDisinfection modifiedForeignProxyDisinfection,JSONObject params); public String loadTousseByForeignProxyDisinfectionid(String foreignProxyDisinfectionid); + public void getPrintInfo(JSONObject obj,JSONObject params); public void endForeignProxyDisinfectionByArr(String[] ids); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/foreignproxydisinfection/ForeignProxyDisinfection.java =================================================================== diff -u -r14721 -r14750 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/foreignproxydisinfection/ForeignProxyDisinfection.java (.../ForeignProxyDisinfection.java) (revision 14721) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/sterilizationmanager/foreignproxydisinfection/ForeignProxyDisinfection.java (.../ForeignProxyDisinfection.java) (revision 14750) @@ -52,11 +52,15 @@ private Date scheduleTime; /** - * 是否装配(如果有点击装配并打印或产生过包实例,则该字段变为已打印;否则默认为未打印) - * 伪字段,不映射到数据库表 + * 是否已经打印 */ private String hasPrinted = Constants.STR_NO; + /** + * 是否已经装配 + */ + private String hasPacked = Constants.STR_NO; + @JsonIgnore private List foreignProxyItems = new ArrayList(); @@ -154,5 +158,28 @@ public void setHasPrinted(String hasPrinted) { this.hasPrinted = hasPrinted; } + + @Transient + public boolean hasPrinted(){ + if(Constants.STR_YES.equals(hasPrinted)){ + return true; + } + return false; + } + public String getHasPacked() { + return hasPacked; + } + + public void setHasPacked(String hasPacked) { + this.hasPacked = hasPacked; + } + + @Transient + public boolean hasPacked(){ + if(Constants.STR_YES.equals(hasPacked)){ + return true; + } + return false; + } } \ No newline at end of file Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/action/ForeignProxyDisinfectionAction.java =================================================================== diff -u -r14649 -r14750 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/action/ForeignProxyDisinfectionAction.java (.../ForeignProxyDisinfectionAction.java) (revision 14649) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/foreignproxydisinfection/action/ForeignProxyDisinfectionAction.java (.../ForeignProxyDisinfectionAction.java) (revision 14750) @@ -28,6 +28,7 @@ import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; +import com.forgon.Constants; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.sterilizationmanager.foreignproxydisinfection.ForeignProxyDisinfection; @@ -37,6 +38,8 @@ import com.forgon.disinfectsystem.vo.PrintApplicationItemVO; import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.StrutsResponseUtils; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.json.JSONUtil; import com.forgon.tools.json.JsonPropertyFilter; import com.opensymphony.xwork2.ModelDriven; import com.opensymphony.xwork2.Preparable; @@ -79,43 +82,13 @@ public void saveForeignProxyDisinfection() { long t1 = System.currentTimeMillis(); - String itemInfoList = StrutsParamUtils.getPraramValue("itemIds", ""); - String isPackingAndPrintStr = StrutsParamUtils.getPraramValue("isPackingAndPrint", ""); - boolean isPackingAndPrint = false; - if("true".equals(isPackingAndPrintStr)){ - isPackingAndPrint = true; - } - SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); - String applicationTimeStr = StrutsParamUtils.getPraramValue("applicationTimeStr",sdf.format(Calendar.getInstance().getTime())); - String arrivedTimeStr = StrutsParamUtils.getPraramValue("arrivedTimeStr",sdf.format(Calendar.getInstance().getTime())); - String scheduleTimeStr = StrutsParamUtils.getPraramValue("scheduleTimeStr",sdf.format(Calendar.getInstance().getTime())); - try { - foreignProxyDisinfection.setApplicationTime(sdf.parse(applicationTimeStr)); - foreignProxyDisinfection.setArrivedTime(sdf.parse(arrivedTimeStr)); - foreignProxyDisinfection.setScheduleTime(sdf.parse(scheduleTimeStr)); - } catch (ParseException e) { - e.printStackTrace(); - } - if(StringUtils.isBlank(foreignProxyDisinfection.getSettleAccountsDepart())){ - foreignProxyDisinfection.setSettleAccountsDepart(foreignProxyDisinfection.getDepart()); - } - if(StringUtils.isBlank(foreignProxyDisinfection.getSettleAccountsDepartCoding())){ - foreignProxyDisinfection.setSettleAccountsDepartCoding(foreignProxyDisinfection - .getDepartCoding()); - } - if(StringUtils.isBlank(foreignProxyDisinfection.getHandleDepart())){ - foreignProxyDisinfection.setHandleDepart(AcegiHelper.getCurrentOrgUnitName()); - } - if(StringUtils.isBlank(foreignProxyDisinfection.getHandleDepartCoding())){ - foreignProxyDisinfection.setHandleDepartCoding(AcegiHelper.getCurrentOrgUnitCode()); - } + JSONObject params = buildParams(); + JSONObject jsonObj = new JSONObject(); try { - JSONArray printParamList = foreignProxyDisinfectionManager - .saveProxyDisinfectionWithParam(foreignProxyDisinfection, - itemInfoList, isPackingAndPrint); + foreignProxyDisinfectionManager + .saveOrUpdateProxyDisinfection(foreignProxyDisinfection,params); jsonObj.put("success", true); - jsonObj.put("result", printParamList); JSONObject foreignProxyDisinfectionJson = new JSONObject(); foreignProxyDisinfectionJson.put("id", foreignProxyDisinfection.getId()); jsonObj.put("foreignProxyDisinfection", foreignProxyDisinfectionJson); @@ -136,6 +109,85 @@ } + private JSONObject buildParams() { + JSONObject params = new JSONObject(); + String itemInfoList = StrutsParamUtils.getPraramValue("itemIds", ""); + String packTousse = StrutsParamUtils.getPraramValue("packTousse", ""); + String printTousse = StrutsParamUtils.getPraramValue("printTousse", ""); + String printApplication = StrutsParamUtils.getPraramValue("printApplication", ""); + params.put("itemInfoList", itemInfoList); + if("true".equals(packTousse)){ + params.put("packTousse", true); + }else{ + params.put("packTousse", false); + } + if("true".equals(printTousse)){ + params.put("printTousse", true); + }else{ + params.put("printTousse", false); + } + if("true".equals(printApplication)){ + params.put("printApplication", true); + }else{ + params.put("printApplication", false); + } + + params.put("applicationTimeStr", StrutsParamUtils.getPraramValue("applicationTimeStr", null)); + params.put("arrivedTimeStr", StrutsParamUtils.getPraramValue("arrivedTimeStr", null)); + params.put("scheduleTimeStr", StrutsParamUtils.getPraramValue("scheduleTimeStr", null)); + return params; + } + + public void packForeignProxyDisinfection() { + + long t1 = System.currentTimeMillis(); + JSONObject params = buildParams(); + + JSONObject jsonObj = new JSONObject(); + boolean printTousse = JSONUtil.optBoolean(params, "printTousse", false); + boolean printApplication = JSONUtil.optBoolean(params, "printApplication", false); + ForeignProxyDisinfection retForeignProxyDisinfection = null; + try { + try { + foreignProxyDisinfectionManager.packForeignProxyDisinfection(foreignProxyDisinfection,params); + jsonObj.put("success", true); + } catch (Exception e) { + e.printStackTrace(); + jsonObj.put("success", false); + jsonObj.put("msg", e.getMessage()); + } + // 是否打印 + if(printApplication || printTousse){ + try { + Long id = foreignProxyDisinfection.getId(); + if(DatabaseUtil.isPoIdValid(id)){ + params.put("id", id); + foreignProxyDisinfectionManager.getPrintInfo(jsonObj,params); + jsonObj.put("success", true); + } + } catch (Exception e) { + e.printStackTrace(); + jsonObj.put("success", false); + jsonObj.put("msg", e.getMessage()); + } + } + } catch (Exception e) { + e.printStackTrace(); + jsonObj.put("success", false); + jsonObj.put("failure", true); + jsonObj.put("msg", e.getMessage()); + } + + StrutsResponseUtils.output(jsonObj); + + long t2 = System.currentTimeMillis(); + + logger.debug("Thread " + Thread.currentThread().getName() + + " saveForeignProxyDisinfection,装配外部代理灭菌时间:" + (t2 - t1) + + " ms"); + + } + public void loadTousses() { String foreignProxyDisinfectionid = StrutsParamUtils.getPraramValue( "foreignProxyDisinfectionid", ""); @@ -218,10 +270,21 @@ e.printStackTrace(); } } - + private ForeignProxyDisinfection getForeignProxyDisinfection(){ + String id = StrutsParamUtils.getPraramValue("id", ""); + ForeignProxyDisinfection foreignProxyDisinfection = null; + if (StringUtils.isNotBlank(id) && !id.equals("0")) { + foreignProxyDisinfection = foreignProxyDisinfectionManager.getById(id); + } + if(foreignProxyDisinfection == null){ + foreignProxyDisinfection = new ForeignProxyDisinfection(); + } + return foreignProxyDisinfection; + } public void loadForeignProxyDisinfection() { try { - StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); + ForeignProxyDisinfection foreignProxyDisinfection = getForeignProxyDisinfection(); + JsonConfig config = new JsonConfig(); config.setExcludes(new String[] { "foreignProxyItems", "applicationItems", "invoice","foreignProxyDisinfection" }); @@ -244,36 +307,21 @@ map.put("success", true); map.put("data", foreignProxyDisinfection); boolean isEditable = false;// 是否可以编辑 - - String deliverStatus = foreignProxyDisinfection.getDeliverStatus(); -// if (InvoicePlan.DELIVERSTATUS_DELIVERED.equals(deliverStatus) -// || InvoicePlan.DELIVERSTATUS_PARTDELIVERED.equals(deliverStatus)) { -// isEditable = true; -// } else - { - Boolean isPackingAndPrint = foreignProxyDisinfectionManager - .checkToussesInForeignProxyItemIsPackingAndPrint(foreignProxyDisinfection - .getId()); - if(!isPackingAndPrint){ - isEditable = true; - } + if(!foreignProxyDisinfection.hasPacked()){ + isEditable = true; } map.put("isEditable", isEditable); JSONObject jsonObject = JSONObject.fromObject(map, config); - String jsonStr = jsonObject.toString(); - try { - StrutsParamUtils.getResponse().getWriter().println(jsonStr); - } catch (IOException e) { - e.printStackTrace(); - } + StrutsResponseUtils.output(jsonObject); + } catch (Exception e) { e.printStackTrace(); } } public void loadForeignItemsById() { - StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); + ForeignProxyDisinfection foreignProxyDisinfection = getForeignProxyDisinfection(); JsonConfig config = new JsonConfig(); PropertyFilter propertyFilter = new JsonPropertyFilter(new String[] { "tousseDefinition", "washAndDisinfectRecords", @@ -290,22 +338,11 @@ }); JSONArray jSONArray = JSONArray.fromObject( foreignProxyDisinfection.getForeignProxyItems(), config); - String jsonStr = jSONArray.toString(); - try { - StrutsParamUtils.getResponse().getWriter().println(jsonStr); - } catch (IOException e) { - e.printStackTrace(); - } + StrutsResponseUtils.output(jSONArray); } - public void iniInfo() { - String id = StrutsParamUtils.getPraramValue("id", ""); - if (StringUtils.isNotBlank(id) && !id.equals("0")) { - foreignProxyDisinfection = foreignProxyDisinfectionManager - .getById(id); - } else { - foreignProxyDisinfection = new ForeignProxyDisinfection(); - } + private void iniInfo() { + foreignProxyDisinfection = new ForeignProxyDisinfection(); } @Override Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoicePlan.java =================================================================== diff -u -r14483 -r14750 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoicePlan.java (.../InvoicePlan.java) (revision 14483) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/invoicemanager/InvoicePlan.java (.../InvoicePlan.java) (revision 14750) @@ -720,5 +720,18 @@ } return null; } - + @Transient + public TousseItem findTousseItemById(Long id) { + if (id == null) { + return null; + } + if (applicationItems != null) { + for (TousseItem tousseItem : applicationItems) { + if (id.equals(tousseItem.getId())) { + return tousseItem; + } + } + } + return null; + } }