Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/vo/TousseItenInfo.java =================================================================== diff -u --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/vo/TousseItenInfo.java (revision 0) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/vo/TousseItenInfo.java (revision 16233) @@ -0,0 +1,35 @@ +package com.forgon.disinfectsystem.sterilizationmanager.proxydisinfection.vo; + +import com.forgon.tools.string.StringTools; + +public class TousseItenInfo { + private String tousseName; + private Integer amount; + private String tousseType; + private Long invoicePlanId; + public String getTousseName() { + return tousseName; + } + public void setTousseName(String tousseName) { + this.tousseName = tousseName; + } + public Integer getAmount() { + return amount; + } + public void setAmount(Integer amount) { + this.amount = amount; + } + public String getTousseType() { + return tousseType; + } + public void setTousseType(String tousseType) { + this.tousseType = tousseType; + } + public Long getInvoicePlanId() { + return invoicePlanId; + } + public void setInvoicePlanId(Long invoicePlanId) { + this.invoicePlanId = invoicePlanId; + } + +} Index: ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/proxyDisinfectionView.js =================================================================== diff -u -r15494 -r16233 --- ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/proxyDisinfectionView.js (.../proxyDisinfectionView.js) (revision 15494) +++ ssts-web/src/main/webapp/disinfectsystem/sterilizationmanager/sterilizationrecord/proxyDisinfectionView.js (.../proxyDisinfectionView.js) (revision 16233) @@ -648,12 +648,14 @@ waitMsg : '正在保存数据,请稍候', waitTitle : '提交表单', success : function(form, action) { - window.close(); - showResult("保存成功!"); + showResult(action.result.message); grid.dwrReload(); + window.close(); }, failure : function(form, action) { - showResult(action.failureType); + if(action.result && action.result.message){ + showResult(action.result.message); + } } }); } Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/service/ProxyDisinfectionManagerImpl.java =================================================================== diff -u -r15541 -r16233 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/service/ProxyDisinfectionManagerImpl.java (.../ProxyDisinfectionManagerImpl.java) (revision 15541) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/service/ProxyDisinfectionManagerImpl.java (.../ProxyDisinfectionManagerImpl.java) (revision 16233) @@ -10,6 +10,7 @@ import java.util.List; import java.util.Map; import java.util.Set; + import net.sf.json.JSONArray; import net.sf.json.JSONObject; @@ -30,11 +31,13 @@ import com.forgon.disinfectsystem.entity.sterilizationmanager.proxydisinfection.ProxyDisinfection; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.recyclingapplication.service.InvoicePlanManager; +import com.forgon.disinfectsystem.sterilizationmanager.proxydisinfection.vo.TousseItenInfo; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; import com.forgon.log.model.Log; import com.forgon.log.service.LogManager; import com.forgon.tools.GB2Alpha; import com.forgon.tools.GB2WB; +import com.forgon.tools.MathTools; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.string.StringTools; @@ -130,6 +133,7 @@ @Override public void saveOrUpdate(ProxyDisinfection proxyDisinfection, String[] tousseInstanceIdStrs, JSONArray basketInfos,String loginUserName,String loginUserCode) { + saveOrUpdate(proxyDisinfection);//先保存,获取id Set tousseInstanceList = getTousseInstanceAndReviewedBasketInfo(proxyDisinfection, tousseInstanceIdStrs, basketInfos,loginUserName,loginUserCode); saveOrUpdate(proxyDisinfection); @@ -339,30 +343,20 @@ tousseInstance.setFluctuationPrice(fPrice); } + // 设置发货物品明细 - Map tousseItemsMap = new HashMap(); - for (TousseInstance tousseInstance : newProxyTousseInstanceList) { - String tousseName = tousseInstance.getTousseDefinition().getName(); - if (tousseItemsMap.get(tousseName) == null) { - tousseItemsMap.put(tousseName, 1); - } else { - tousseItemsMap.put(tousseName, - tousseItemsMap.get(tousseName) + 1); - } - } - Iterator tousseNameIterator = tousseItemsMap.keySet() - .iterator(); + List tousseInfos = generateTousseItemInfo(proxyDisinfection, newProxyTousseInstanceList); List tousseItemList = new ArrayList(); - while (tousseNameIterator.hasNext()) { - String tousseName = tousseNameIterator.next(); + for(TousseItenInfo tii : tousseInfos){ TousseItem tousseItem = new TousseItem(); - tousseItem.setTousseName(tousseName); - tousseItem.setAmount(tousseItemsMap.get(tousseName)); + tousseItem.setTousseName(tii.getTousseName()); + tousseItem.setAmount(tii.getAmount()); tousseItem.setDiposable("否"); tousseItem.setInvoicePlan(proxyDisinfection); + tousseItem.setTousseType(tii.getTousseType()); + tousseItem.setInvoicePlanID(tii.getInvoicePlanId()); tousseItemList.add(tousseItem); } - if(proxyDisinfection.getApplicationItems() != null){ for (TousseItem tousseItem : proxyDisinfection.getApplicationItems()) { objectDao.delete(tousseItem); @@ -371,6 +365,46 @@ proxyDisinfection.setApplicationItems(tousseItemList); return newProxyTousseInstanceList; } + /** + * 生成申请项的信息。相同名称和类型的包实例,生成一个申请项信息。如果包名称一样,类型不一样。抛出异常,暂时允许这么干. + * 同一张申请单,有两个相同名称的申请项,后续操作可能会有问题 + * @param proxyDisinfection + * @param newProxyTousseInstanceList + * @return + */ + private List generateTousseItemInfo(ProxyDisinfection proxyDisinfection, + Set newProxyTousseInstanceList) { + List tousseInfos = new ArrayList<>(); + if(CollectionUtils.isEmpty(newProxyTousseInstanceList)){ + return tousseInfos; + } + for (TousseInstance tousseInstance : newProxyTousseInstanceList) { + if(tousseInstance.getTousseDefinition() == null){ + throw new RuntimeException(tousseInstance.getTousseName() + "未关联包定义"); + } + TousseItenInfo addedInfo = null; + for(TousseItenInfo tii : tousseInfos){ + if(StringTools.equals(tii.getTousseName(), tousseInstance.getTousseName())){ + if(!StringTools.equals(tii.getTousseType(), tousseInstance.getTousseDefinition().getTousseType())){ + //相同名称不同类型的包,不能保存 + throw new RuntimeException("条码为" + tousseInstance.getBarcode() + "的" + + tousseInstance.getTousseName()+ ",与其他同名的包不是同一个类型"); + }else{ + addedInfo = tii; + } + } + } + if(addedInfo == null){ + addedInfo = new TousseItenInfo(); + addedInfo.setInvoicePlanId(proxyDisinfection.getId()); + addedInfo.setTousseName(tousseInstance.getTousseName()); + addedInfo.setTousseType(tousseInstance.getTousseDefinition().getTousseType()); + tousseInfos.add(addedInfo); + } + addedInfo.setAmount(MathTools.add(addedInfo.getAmount(), 1).intValue()); + } + return tousseInfos; + } private void deleteBasket(ProxyDisinfection proxyDisinfection, ReviewedBasket oldBasket) { Index: ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/action/ProxyDisinfectionAction.java =================================================================== diff -u -r16169 -r16233 --- ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/action/ProxyDisinfectionAction.java (.../ProxyDisinfectionAction.java) (revision 16169) +++ ssts-sterile/src/main/java/com/forgon/disinfectsystem/sterilizationmanager/proxydisinfection/action/ProxyDisinfectionAction.java (.../ProxyDisinfectionAction.java) (revision 16233) @@ -163,9 +163,14 @@ proxyDisinfectionManager.saveOrUpdate(proxyDisinfection, tousseInstanceIdStrs, basketInfos, loginUserName,""); + StrutsResponseUtils.output(true,"保存成功"); } + }catch(RuntimeException e){ + e.printStackTrace(); + StrutsResponseUtils.output(false,e.getMessage()); } catch (Exception e) { e.printStackTrace(); + StrutsResponseUtils.output(false,"保存失败"); } return null; }