Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/service/TousseTransitionPlanItemManager.java =================================================================== diff -u -r17782 -r17787 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/service/TousseTransitionPlanItemManager.java (.../TousseTransitionPlanItemManager.java) (revision 17782) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/service/TousseTransitionPlanItemManager.java (.../TousseTransitionPlanItemManager.java) (revision 17787) @@ -2,19 +2,19 @@ import java.util.List; -import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; +import com.forgon.disinfectsystem.entity.toussetransition.TousseTransitionPlan; import com.forgon.disinfectsystem.entity.toussetransition.TousseTransitionPlanItem; import com.forgon.tools.hibernate.BasePoManager; public interface TousseTransitionPlanItemManager extends BasePoManager { /** - * 根据申请单及是否合并创建并保存器械交接计划明细 - * @param invoicePlan - * @param items 交接明细项 - * @param merge + * 将器械交接明细添加到器械交接单中 + * @param tousseTransitionPlan 器械交接单 + * @param items 器械交接明细 + * @return */ - public List save(InvoicePlan invoicePlan,List items, - boolean merge); + public void save(TousseTransitionPlan tousseTransitionPlan, + List items); /** * 根据申请项信息创建器械交接申请项 * @param tousseItemId 申请单申请项id Index: forgon-tools/src/main/java/com/forgon/tools/hibernate/BasePoManagerImpl.java =================================================================== diff -u -r17347 -r17787 --- forgon-tools/src/main/java/com/forgon/tools/hibernate/BasePoManagerImpl.java (.../BasePoManagerImpl.java) (revision 17347) +++ forgon-tools/src/main/java/com/forgon/tools/hibernate/BasePoManagerImpl.java (.../BasePoManagerImpl.java) (revision 17787) @@ -6,6 +6,7 @@ import java.util.HashSet; import java.util.LinkedList; import java.util.List; +import java.util.Map; import java.util.Set; import org.apache.commons.collections4.CollectionUtils; @@ -120,6 +121,7 @@ } return getFirst(hql); } + @Override public T getForUpdate(Long id) { T o = (T)objectDao.getByID_ForUpdate(poName, id); @@ -142,13 +144,37 @@ @SuppressWarnings("unchecked") @Override public List getByProperty(String property, String value) { - if(StringTools.isNotBlank(property) && value != null){ + if(StringTools.isNotBlank(property)){ + if(value == null){ + return getIsNull(property); + } return objectDao.findByProperty(poName, property, value); } return null; } + @SuppressWarnings("unchecked") @Override + public List getByProperty(String property, Long value) { + if(StringTools.isNotBlank(property)){ + if(value == null){ + return getIsNull(property); + } + return objectDao.findByProperty(poName, property, value.toString()); + } + return null; + } + /** + * 获取属性为null的对象 + * @param property + * @return + */ + public List getIsNull(String property) { + String condition = "po." + property + " is null"; + return getByHql(condition); + } + + @Override public T getFirst(String property, String value) { List list = getByProperty(property, value); if(CollectionUtils.isNotEmpty(list)){ @@ -167,7 +193,17 @@ } return null; } - + @Override + public T getFirst(String condition,Map params){ + Query query = buildQuery(condition, params); + query.setFirstResult(0); + query.setMaxResults(1); + List list = query.list(); + if(CollectionUtils.isNotEmpty(list)){ + return list.get(0); + } + return null; + } @SuppressWarnings("unchecked") @Override public List getByHql(String condition) { @@ -251,6 +287,29 @@ public List getCollectionForUpdate(String property,Collection values){ return objectDao.getCollection_ForUpdate(poName, property, values); } + @Override + public List getCollection(String condition, Map params) { + if(StringTools.isBlank(condition)){ + return null; + } + if(params == null || params.size() <= 0){ + return getByHql(condition); + } + Query query = buildQuery(condition, params); + return query.list(); + } + + private Query buildQuery(String condition, Map params) { + Query query = objectDao.getHibernateSession().createQuery("from " + poName + " where " + defaultIfEmpty(condition)); + for(Map.Entry entry : params.entrySet()){ + if(entry.getValue() instanceof Collection){ + query.setParameterList(entry.getKey(), (Collection)entry.getValue()); + }else{ + query.setParameter(entry.getKey(), entry.getValue()); + } + } + return query; + } /** * 根据ids集合获取数据。传入的ids集合中所有项直接传给in语句,所以调用地方需要确保in语句长度限制问题. * 并且集合中包括非法的id值(如null),也有可能会有问题,需要调用的地方确保 Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/service/TousseTransitionPlanItemManagerImpl.java =================================================================== diff -u -r17782 -r17787 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/service/TousseTransitionPlanItemManagerImpl.java (.../TousseTransitionPlanItemManagerImpl.java) (revision 17782) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/service/TousseTransitionPlanItemManagerImpl.java (.../TousseTransitionPlanItemManagerImpl.java) (revision 17787) @@ -3,28 +3,56 @@ import java.util.List; import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.collections4.Predicate; -import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; -import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; +import com.forgon.disinfectsystem.entity.toussetransition.TousseTransitionPlan; import com.forgon.disinfectsystem.entity.toussetransition.TousseTransitionPlanItem; +import com.forgon.tools.MathTools; import com.forgon.tools.hibernate.BasePoManagerImpl; public class TousseTransitionPlanItemManagerImpl extends BasePoManagerImpl implements TousseTransitionPlanItemManager{ @Override - public List save(InvoicePlan invoicePlan,List items, - boolean merge) { - if(invoicePlan == null || CollectionUtils.isEmpty(invoicePlan.getApplicationItems())){ - throw new RuntimeException("生成预回收单的申请单不能为空"); + public void save(TousseTransitionPlan tousseTransitionPlan, + List items) { + if(CollectionUtils.isEmpty(items)){ + throw new RuntimeException("器械交接明细不能为空"); } - //查询与此申请单关联的预回收单 - for(TousseItem tousseItem : invoicePlan.getApplicationItems()){ - + if(tousseTransitionPlan == null){ + throw new RuntimeException("器械交接单不能为空"); } - return null; + List exists = getByProperty("TousseTransitionPlanId", tousseTransitionPlan.getId()); + for(TousseTransitionPlanItem item:items){ + TousseTransitionPlanItem find = find(exists,item.getTousseItemId()); + if(find == null){ + find = build(item.getTousseItemId(),item.getAmount(),item.getUrgentAmount()); + find.setTousseTransitionPlanId(tousseTransitionPlan.getId()); + }else{ + find.setAmount(MathTools.add(find.getAmount(),item.getAmount()).intValue()); + find.setUrgentAmount(MathTools.add(find.getUrgentAmount(), item.getUrgentAmount()).intValue()); + } + save(find); + } } - + /** + * 在集合中查找指定申请项id的交接明细 + * @param items + * @param tousseItemId + * @return + */ + private TousseTransitionPlanItem find(List items,Long tousseItemId){ + TousseTransitionPlanItem item = null; + if(CollectionUtils.isNotEmpty(items)){ + item = CollectionUtils.find(items, new Predicate(){ + @Override + public boolean evaluate(TousseTransitionPlanItem object) { + return tousseItemId != null && tousseItemId.equals(object.getTousseItemId()); + } + }); + } + return item; + } @Override public TousseTransitionPlanItem build(Long tousseItemId,Integer amount,Integer urgentAmount) { TousseTransitionPlanItem item = new TousseTransitionPlanItem(); Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/service/TousseTransitionPlanManagerImpl.java =================================================================== diff -u -r17783 -r17787 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/service/TousseTransitionPlanManagerImpl.java (.../TousseTransitionPlanManagerImpl.java) (revision 17783) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/service/TousseTransitionPlanManagerImpl.java (.../TousseTransitionPlanManagerImpl.java) (revision 17787) @@ -1,29 +1,70 @@ package com.forgon.disinfectsystem.toussetransition.service; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; +import org.apache.commons.collections4.CollectionUtils; + import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.toussetransition.TousseTransitionPlan; +import com.forgon.disinfectsystem.entity.toussetransition.TousseTransitionPlanItem; import com.forgon.disinfectsystem.entity.useRecord.UseRecord; +import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.BasePoManagerImpl; public class TousseTransitionPlanManagerImpl extends BasePoManagerImpl implements TousseTransitionPlanManager { + private TousseTransitionPlanItemManager tousseTransitionPlanItemManager; + + public void setTousseTransitionPlanItemManager( + TousseTransitionPlanItemManager tousseTransitionPlanItemManager) { + this.tousseTransitionPlanItemManager = tousseTransitionPlanItemManager; + } + @Override - public void save(UseRecord useRecord,InvoicePlan invoicePlan,List items,boolean merge) { - // TODO Auto-generated method stub - TousseTransitionPlan tousseTransitionPlan = new TousseTransitionPlan(); - tousseTransitionPlan.setCreateTime(new Date()); - tousseTransitionPlan.setDepart(invoicePlan.getDepart()); - tousseTransitionPlan.setDepartCode(invoicePlan.getDepartCoding()); - tousseTransitionPlan.setHandleDepart(invoicePlan.getHandleDepart()); - tousseTransitionPlan.setHandleDepartCode(invoicePlan.getHandleDepartCoding()); - tousseTransitionPlan.setInvoicePlanId(invoicePlan.getId()); - tousseTransitionPlan.setStatus(TousseTransitionPlan.STATUS_WAIT_TRANSITION); - tousseTransitionPlan.setUseRecordId(useRecord.getId()); - save(tousseTransitionPlan); + public void save(UseRecord useRecord,InvoicePlan invoicePlan,List items,boolean merge) { + if(useRecord == null){ + throw new RuntimeException("使用记录不能为空"); + } + if(DatabaseUtil.isPoIdValid(useRecord.getId())){ + throw new RuntimeException("使用记录id为空,请先保存使用记录"); + } + if(invoicePlan == null){ + throw new RuntimeException("申请单不能为空"); + } + if(DatabaseUtil.isPoIdValid(invoicePlan.getId())){ + throw new RuntimeException("申请单id为空,请先保存申请单"); + } + if(CollectionUtils.isEmpty(items)){ + throw new RuntimeException("预回收明细项不能为空"); + } + TousseTransitionPlan tousseTransitionPlan = null; + if(merge){ + // 获取申请单已经保存的预回收单 + Map params = new HashMap(); + params.put("invoicePlanId", invoicePlan.getId()); + params.put("status", TousseTransitionPlan.STATUS_WAIT_TRANSITION); + + tousseTransitionPlan = getFirst("invoicePlanId=:invoicePlanId and status=:status order by createTime desc", params); + + } + if(tousseTransitionPlan == null){ + //不合并或者没有找到已经存在的预回收单,则新建 + tousseTransitionPlan = new TousseTransitionPlan(); + tousseTransitionPlan.setCreateTime(new Date()); + tousseTransitionPlan.setDepart(invoicePlan.getDepart()); + tousseTransitionPlan.setDepartCode(invoicePlan.getDepartCoding()); + tousseTransitionPlan.setHandleDepart(invoicePlan.getHandleDepart()); + tousseTransitionPlan.setHandleDepartCode(invoicePlan.getHandleDepartCoding()); + tousseTransitionPlan.setInvoicePlanId(invoicePlan.getId()); + tousseTransitionPlan.setStatus(TousseTransitionPlan.STATUS_WAIT_TRANSITION); + tousseTransitionPlan.setUseRecordId(useRecord.getId()); + save(tousseTransitionPlan); + } + tousseTransitionPlanItemManager.save(tousseTransitionPlan, items); } } Index: forgon-tools/src/main/java/com/forgon/tools/hibernate/BasePoManager.java =================================================================== diff -u -r17347 -r17787 --- forgon-tools/src/main/java/com/forgon/tools/hibernate/BasePoManager.java (.../BasePoManager.java) (revision 17347) +++ forgon-tools/src/main/java/com/forgon/tools/hibernate/BasePoManager.java (.../BasePoManager.java) (revision 17787) @@ -2,6 +2,7 @@ import java.util.Collection; import java.util.List; +import java.util.Map; /** * 数据库操作服务对象的基类接口 @@ -73,6 +74,13 @@ */ public List getCollection(String property,Collection values); /** + * 根据参数获取对象 + * @param condition 条件 + * @param params 参数,key为属性名,value为参数值。value可以是单个对象,也可以是集合对象 + * @return + */ + public List getCollection(String condition,Map params); + /** * 获取属性值属于对应集合的所有对象,并加锁,以便可以更新 * @param property * @param values @@ -100,12 +108,25 @@ public T getForUpdate(String property,Object value); /** * 根据属性值获取对象 - * @param property 属性名 - * @param value 属性值 + * @param property 属性名.不能为空,如果为空,返回null + * @param value 属性值.如果为null,返回属性值为null(is null)的对象 * @return 成功返回所有满足条件的对象,否则返回空集合 */ public List getByProperty(String property,String value); /** + * 根据属性值获取对象 + * @param property 属性名称,不能为空。 + * @param value 属性值,如果为null,返回属性值为null(is null)的对象 + * @return + */ + public List getByProperty(String property, Long value); + /** + * 获取属性值为null的对象 + * @param property + * @return + */ + public List getIsNull(String property); + /** * 获取对应属性值的第一个对象 * @param property 属性名 * @param value 属性值 @@ -119,6 +140,13 @@ */ public T getFirst(String condition); /** + * 根据参数获取第一个对象 + * @param condition + * @param params + * @return + */ + public T getFirst(String condition,Map params); + /** * 根据查询条件查询满足条件的所有记录 * @param condition 条件语句,如果为空,表示1=0 * @return 成功返回所有满足条件的对象,否则返回空集合 Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/service/TousseTransitionPlanManager.java =================================================================== diff -u -r17786 -r17787 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/service/TousseTransitionPlanManager.java (.../TousseTransitionPlanManager.java) (revision 17786) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/toussetransition/service/TousseTransitionPlanManager.java (.../TousseTransitionPlanManager.java) (revision 17787) @@ -4,6 +4,7 @@ import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.toussetransition.TousseTransitionPlan; +import com.forgon.disinfectsystem.entity.toussetransition.TousseTransitionPlanItem; import com.forgon.disinfectsystem.entity.useRecord.UseRecord; import com.forgon.tools.hibernate.BasePoManager; @@ -12,7 +13,8 @@ * 保存器械交接单 * @param useRecord 使用记录 * @param invoicePlan 转换后的申请单,需要先保存到数据库,需要取其id值 + * @param items 器械交接明细 * @param merge 是否合并 */ - public void save(UseRecord useRecord,InvoicePlan invoicePlan,List items,boolean merge); + public void save(UseRecord useRecord,InvoicePlan invoicePlan,List items,boolean merge); }