Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/service/OperationReservationManagerImpl.java =================================================================== diff -u -r37393 -r37397 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/service/OperationReservationManagerImpl.java (.../OperationReservationManagerImpl.java) (revision 37393) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/service/OperationReservationManagerImpl.java (.../OperationReservationManagerImpl.java) (revision 37397) @@ -13,6 +13,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; +import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Set; @@ -1534,4 +1535,150 @@ } return accessStatus; } + + @Override + public JSONArray loadOperationReservationStorageTousse(String id) { + + JSONArray data = new JSONArray(); + List list = loadOperationReservationStorageTousseInstance(id); + if(CollectionUtils.isNotEmpty(list)){ + List tousseInstanceIdList = new ArrayList(); + String [] filterProperties = TousseInstance.filterProperties; + for (TousseInstance tousseInstance : list) { + String tousseJsonStr = JSONUtil.toJSONStringEx(tousseInstance,true,filterProperties); + data.add(tousseJsonStr); + tousseInstanceIdList.add(tousseInstance.getId()); + } + Map tousseInstanceStorageLocationMap = loadTousseInstanceStorageLocationMap(tousseInstanceIdList); + if(MapUtils.isNotEmpty(tousseInstanceStorageLocationMap)){ + for(int i=0;i loadTousseInstanceStorageLocationMap(List tousseInstanceIdList) { + Map tousseInstanceStorageLocationMap = new HashMap(); + if(CollectionUtils.isEmpty(tousseInstanceIdList)){ + return tousseInstanceStorageLocationMap; + } + String sql = String.format("select st.tousseInstanceId, sl.name storageLocationName from %s st " + + "join %s sl on sl.id = st.storageLocationId " + + "where %s ", + Storage_TousseInstance.class.getSimpleName(), + StorageLocation.class.getSimpleName(), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("st.tousseInstanceId", tousseInstanceIdList)); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql); + while(rs.next()){ + Long tousseInstanceId = rs.getLong("tousseInstanceId"); + String storageLocationName = rs.getString("storageLocationName"); + tousseInstanceStorageLocationMap.put(tousseInstanceId, storageLocationName); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + return tousseInstanceStorageLocationMap; + } + + @SuppressWarnings("unchecked") + public List loadOperationReservationStorageTousseInstance(String id) { + if(!DatabaseUtil.isPoIdValid(id)){ + throw new RuntimeException("参数异常!"); + } + OperationReservation operationReservation = this.get(id); + if(operationReservation == null){ + return null; + } + if(operationReservation.delivered()){ + return null; + } + List applicationItems = operationReservation.getApplicationItems(); + if(CollectionUtils.isEmpty(applicationItems)){ + return null; + } + //申请科室 + String departCoding = operationReservation.getDepartCoding(); + Collection applicationTousseDefinitionIdSet = new LinkedHashSet(); + for (TousseItem tousseItem : applicationItems) { + Long ancestorID = tousseItem.getAncestorID(); + Integer amount = tousseItem.getAmount(); + Integer sendOutAmount = tousseItem.getSendOutAmount(); + amount = (amount == null ? 0 : amount); + sendOutAmount = (sendOutAmount == null ? 0 : sendOutAmount); + if(sendOutAmount >= amount){ + continue; + } + applicationTousseDefinitionIdSet.add(ancestorID); + } + + if(CollectionUtils.isEmpty(applicationTousseDefinitionIdSet)){ + return null; + } + + String tousseAssociationIdSql = SqlUtils.getNonStringFieldInLargeCollectionsPredicate("tad.tousseDefinitionId", applicationTousseDefinitionIdSet); + + String sql = String.format("select ti.id from Storage_TousseInstance st " + + "join StorageLocation sl on sl.id = st.storageLocationId " + + "join TousseInstance ti on ti.id = st.tousseInstanceId " + + "join TousseDefinition td on td.id = ti.tousseDefinition_id " + + "join TousseDefinition ancestor on ancestor.id = td.ancestorID " + + "join TousseAssociationDetail tad on tad.tousseDefinitionId = ancestor.id " + + "where sl.orgUnitCode = '%s' " + + "and ti.status in ('%s','%s') " + + "and tad.tousseAssociationId in (select tousseAssociationId from TousseAssociationDetail where %s ) " + + "union all " + + "select ti.id from Storage_TousseInstance st " + + "join StorageLocation sl on sl.id = st.storageLocationId " + + "join TousseInstance ti on ti.id = st.tousseInstanceId " + + "join TousseDefinition td on td.id = ti.tousseDefinition_id " + + "join TousseDefinition parent on parent.id = td.parentID " + + "join TousseDefinition ancestor on ancestor.id = parent.ancestorID " + + "join TousseAssociationDetail tad on tad.tousseDefinitionId = ancestor.id " + + "where sl.orgUnitCode = '%s' " + + "and ti.status in ('%s','%s') " + + "and tad.tousseAssociationId in (select tousseAssociationId from TousseAssociationDetail where %s ) ", + departCoding, + TousseInstance.STATUS_STERILED, TousseInstance.STATUS_DISINFECTED, + tousseAssociationIdSql, + departCoding, + TousseInstance.STATUS_STERILED, TousseInstance.STATUS_DISINFECTED, + tousseAssociationIdSql); + + Set tousseInstanceIdSet = new HashSet(); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql); + while(rs.next()){ + tousseInstanceIdSet.add(rs.getLong("id")); + } + } catch (Exception e) { + e.printStackTrace(); + } finally{ + DatabaseUtil.closeResultSetAndStatement(rs); + } + + if(CollectionUtils.isEmpty(tousseInstanceIdSet)){ + return null; + } + + String tousseInstanceSql = String.format("select po from %s po where %s order by po.tousseName", TousseInstance.class.getSimpleName(), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("id", tousseInstanceIdSet)); + + return objectDao.findByHql(tousseInstanceSql); + } + } Index: ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml =================================================================== diff -u -r37391 -r37397 --- ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 37391) +++ ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 37397) @@ -2987,4 +2987,15 @@ + + + + + + + + + \ No newline at end of file Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/action/OperationReservationAction.java =================================================================== diff -u -r36602 -r37397 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/action/OperationReservationAction.java (.../OperationReservationAction.java) (revision 36602) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/action/OperationReservationAction.java (.../OperationReservationAction.java) (revision 37397) @@ -2,11 +2,9 @@ import java.io.IOException; import java.io.PrintWriter; -import java.sql.ResultSet; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; -import java.util.HashMap; import java.util.List; import java.util.Map; @@ -16,19 +14,13 @@ import net.sf.json.JSONObject; import org.apache.commons.collections.CollectionUtils; -import org.apache.commons.collections.MapUtils; import org.apache.commons.lang.StringUtils; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; import com.forgon.Constants; -import com.forgon.directory.model.BarcodeDevice; import com.forgon.disinfectsystem.entity.basedatamanager.operationNameManager.OperationUseTousseItem; -import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; -import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.StorageLocation; -import com.forgon.disinfectsystem.entity.basedatamanager.warehouse.Storage_TousseInstance; -import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.operationreservation.OperationReservation; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; @@ -37,7 +29,6 @@ import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.StrutsResponseUtils; import com.forgon.tools.json.JSONUtil; -import com.forgon.tools.util.ConfigUtils; import com.forgon.tools.util.ForgonDateUtils; import com.forgon.tools.util.PageUtil; import com.opensymphony.xwork2.Preparable; @@ -408,6 +399,22 @@ } StrutsResponseUtils.output(array); } + + /** + * 查询当前手术预约单中,待发货,并且在申请科室的库位中的物品BJDXZLYY-46 + */ + public void loadOperationReservationStorageTousse(){ + JSONObject result = JSONUtil.buildJsonObject(true); + try { + String id = StrutsParamUtils.getPraramValue("id", ""); + JSONArray data = operationReservationManager.loadOperationReservationStorageTousse(id); + result = JSONUtil.buildJsonObject(true, data); + } catch (Exception e) { + result = JSONUtil.buildJsonObject(false, "加载失败:" + e.getMessage()); + } + StrutsResponseUtils.output(result); + } + @Override public void prepare() throws Exception { Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/action/TousseAssociationAction.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/action/TousseAssociationAction.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/action/TousseAssociationAction.java (revision 37397) @@ -0,0 +1,124 @@ +package com.forgon.disinfectsystem.basedatamanager.warehouse.action; + +import java.util.List; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.struts2.convention.annotation.Action; +import org.apache.struts2.convention.annotation.Namespace; +import org.apache.struts2.convention.annotation.ParentPackage; + +import com.forgon.disinfectsystem.basedatamanager.warehouse.service.TousseAssociationManager; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseAssociation; +import com.forgon.entity.PageEntity; +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.util.PageUtil; +import com.opensymphony.xwork2.ModelDriven; +import com.opensymphony.xwork2.Preparable; + +/** + * “器械包关联设置”BJDXZLYY-46 + */ +@ParentPackage(value = "default") +@Namespace(value = "/disinfectSystem/baseData") +@Action(value = "tousseAssociationAction") +public class TousseAssociationAction implements ModelDriven, Preparable { + + private TousseAssociation tousseAssociation; + + private TousseAssociationManager tousseAssociationManager; + + public void setTousseAssociationManager(TousseAssociationManager tousseAssociationManager) { + this.tousseAssociationManager = tousseAssociationManager; + } + + @Override + public void prepare() throws Exception { + String id = StrutsParamUtils.getPraramValue("id", null); + if (DatabaseUtil.isPoIdValid(id)) { + tousseAssociation = tousseAssociationManager.get(id); + } + if (tousseAssociation == null) { + tousseAssociation = new TousseAssociation(); + } + } + + @Override + public TousseAssociation getModel() { + return tousseAssociation; + } + + /** + * 保存或者修改“器械包关联设置” + */ + public void saveOrUpdateTousseAssociation(){ + JSONObject result = JSONUtil.buildJsonObject(true, "保存成功"); + try { + String tousseDefinitionIds = StrutsParamUtils.getPraramValue("tousseDefinitionIds", ""); + tousseAssociationManager.saveOrUpdateTousseAssociation(tousseAssociation, tousseDefinitionIds); + } catch (Exception e) { + result = JSONUtil.buildJsonObject(true, "保存失败:" + e.getMessage()); + } + StrutsResponseUtils.output(result); + } + + /** + * 删除“器械包关联设置” + */ + public void deleteTousseAssociation(){ + JSONObject result = JSONUtil.buildJsonObject(true, "删除成功"); + try { + String ids = StrutsParamUtils.getPraramValue("ids", ""); + tousseAssociationManager.deleteTousseAssociation(ids); + } catch (Exception e) { + result = JSONUtil.buildJsonObject(true, "删除失败:" + e.getMessage()); + } + StrutsResponseUtils.output(result); + } + + /** + * 查询列表接口,支持分页,关键字查询 + */ + @SuppressWarnings("rawtypes") + public void loadTousseAssociationList(){ + JSONObject result = JSONUtil.buildJsonObject(true); + try { + String spell = StrutsParamUtils.getPraramValue("spell", ""); + PageEntity pageEntity = PageUtil.getPagePara(); + pageEntity = tousseAssociationManager.loadTousseAssociationList(pageEntity, spell); + if(pageEntity != null){ + JSONArray data = new JSONArray(); + List list = pageEntity.getList(); + if(CollectionUtils.isNotEmpty(list)){ + data = JSONArray.fromObject(list); + } + int count = pageEntity.getCount(); + result = JSONUtil.buildJsonObject(true, data); + result.put("count", count); + } + }catch(Exception e){ + result = JSONUtil.buildJsonObject(false, "删除失败:" + e.getMessage()); + } + StrutsResponseUtils.output(result); + } + + /** + * “器械包关联设置”排序,orderType=up/down + */ + public void sortTousseAssociation(){ + JSONObject result = JSONUtil.buildJsonObject(true, "排序成功"); + try { + String orderType = StrutsParamUtils.getPraramValue("orderType", ""); + tousseAssociationManager.sortTousseAssociation(tousseAssociation, orderType); + } catch (Exception e) { + result = JSONUtil.buildJsonObject(true, "排序失败:" + e.getMessage()); + } + StrutsResponseUtils.output(result); + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/TousseAssociationManagerImpl.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/TousseAssociationManagerImpl.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/TousseAssociationManagerImpl.java (revision 37397) @@ -0,0 +1,334 @@ +package com.forgon.disinfectsystem.basedatamanager.warehouse.service; + +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.apache.commons.collections.MapUtils; +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.jdbc.core.BatchPreparedStatementSetter; +import org.springframework.jdbc.core.JdbcTemplate; + +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseAssociation; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseAssociationDetail; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; +import com.forgon.entity.PageEntity; +import com.forgon.exception.SystemException; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.db.InitDbConnection; +import com.forgon.tools.hibernate.BasePoManagerImpl; +import com.forgon.tools.string.StringTools; +import com.forgon.tools.util.SqlUtils; + +public class TousseAssociationManagerImpl extends BasePoManagerImpl implements TousseAssociationManager { + + private JdbcTemplate jdbcTemplate; + + private InitDbConnection dbConnection; + + public void setDbConnection(InitDbConnection dbConnection) { + this.dbConnection = dbConnection; + } + + public void setJdbcTemplate(JdbcTemplate jdbcTemplate) { + this.jdbcTemplate = jdbcTemplate; + } + + @Override + public void saveOrUpdateTousseAssociation(TousseAssociation tousseAssociation, String tousseDefinitionIds) { + if(tousseAssociation == null || StringUtils.isBlank(tousseDefinitionIds)){ + throw new SystemException("参数异常!"); + } + //名称不能为空 + if(StringUtils.isBlank(tousseAssociation.getName())){ + throw new SystemException("名称不能为空!"); + } + //名称不能重复 + String countSql = String.format("select count(1) from %s where name = '%s'", + TousseAssociation.class.getSimpleName(), + tousseAssociation.getName()); + if(DatabaseUtil.isPoIdValid(tousseAssociation.getId())){ + countSql += " and id <> " + tousseAssociation.getId(); + } + if(objectDao.countBySql(countSql) > 0){ + throw new SystemException("已存在名称为“" + tousseAssociation.getName() + "”的设置!"); + } + //顺序号不能重复 + if(DatabaseUtil.isPoIdValid(tousseAssociation.getSequence()+"")){ + String seqCountSql = String.format("select count(1) from %s where sequence = %s", + TousseAssociation.class.getSimpleName(), + tousseAssociation.getSequence()); + if(DatabaseUtil.isPoIdValid(tousseAssociation.getId())){ + seqCountSql += " and id <> " + tousseAssociation.getId(); + } + if(objectDao.countBySql(seqCountSql) > 0){ + tousseAssociation.setSequence(getMaxSequence()+1); + } + }else{ + tousseAssociation.setSequence(getMaxSequence()+1); + } + //删除旧数据 + if(DatabaseUtil.isPoIdValid(tousseAssociation.getId())){ + objectDao.excuteSQL(String.format("delete from %s where TousseAssociationId = %s", TousseAssociationDetail.class.getSimpleName(), tousseAssociation.getId())); + } + objectDao.saveOrUpdate(tousseAssociation); + List tousseAssociationDetailList = buildTousseAssociationDetail(tousseAssociation, tousseDefinitionIds); + if(CollectionUtils.isEmpty(tousseAssociationDetailList)){ + throw new SystemException("参数异常!"); + } + //保存“器械包关联设置”关联的包定义明细 + saveTousseAssociationDetail(tousseAssociationDetailList); + } + + /** + * 保存“器械包关联设置”关联的包定义明细 + * @param tousseAssociationDetailList + */ + private void saveTousseAssociationDetail(List tousseAssociationDetailList) { + String idColumnName = null; + String idColumnValue = null; + if(DatabaseUtil.isOracle(dbConnection.getDatabase())){ + idColumnName = "id,"; + idColumnValue = "hibernate_sequence.nextval,"; + }else{ + idColumnName = ""; + idColumnValue = ""; + } + String insertSql = String.format("insert into %s (%s tousseAssociationId,tousseDefinitionId) values (%s ?,?)", + TousseAssociationDetail.class.getSimpleName(), + idColumnName, + idColumnValue); + jdbcTemplate.batchUpdate(insertSql, new BatchPreparedStatementSetter() { + + @Override + public void setValues(PreparedStatement ps, int i) throws SQLException { + ps.setLong(1, tousseAssociationDetailList.get(i).getTousseAssociationId()); + ps.setLong(2, tousseAssociationDetailList.get(i).getTousseDefinitionId()); + } + + @Override + public int getBatchSize() { + return tousseAssociationDetailList.size(); + } + }); + } + + @SuppressWarnings("unchecked") + private List buildTousseAssociationDetail(TousseAssociation tousseAssociation, String tousseDefinitionIds) { + List idList = (List) StringTools.parseToLongs(tousseDefinitionIds, ";"); + List tousseDefinitionList = objectDao.getCollection(TousseDefinition.class.getSimpleName(), "id", idList); + if(CollectionUtils.isEmpty(tousseDefinitionList)){ + throw new SystemException("参数异常!"); + } + if(tousseDefinitionList.size() < idList.size()){ + throw new SystemException("参数异常!"); + } + List tousseAssociationDetailList = new ArrayList(); + for (TousseDefinition td : tousseDefinitionList) { + TousseAssociationDetail tousseAssociationDetail = new TousseAssociationDetail(); + tousseAssociationDetail.setTousseAssociationId(tousseAssociation.getId()); + tousseAssociationDetail.setTousseDefinitionId(td.getId()); + tousseAssociationDetailList.add(tousseAssociationDetail); + } + return tousseAssociationDetailList; + } + + /** + * 查询“器械包关联设置”的最大顺序号 + * @return + */ + private Integer getMaxSequence() { + Integer max = 0; + String message = ""; + String sql = String.format("select max(po.sequence) seq from %s po", TousseAssociation.class.getSimpleName()); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql); + while(rs.next()){ + max = rs.getInt("seq"); + } + } catch (Exception e) { + e.printStackTrace(); + max = null; + message = e.getMessage(); + }finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + if(max == null){ + throw new RuntimeException("查询最大顺序号时报错:" + message); + } + return max ; + } + + @Override + public void deleteTousseAssociation(String ids) { + if(StringUtils.isBlank(ids)){ + throw new RuntimeException("参数异常!"); + } + Collection idList = StringTools.parseToLongs(ids, ";"); + if(CollectionUtils.isEmpty(idList)){ + throw new RuntimeException("参数异常!"); + } + this.delete(ids, ";"); + String detailDeleteSql = String.format("delete from %s where %s ", + TousseAssociationDetail.class.getSimpleName(), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("tousseAssociationId", idList)); + objectDao.excuteSQL(detailDeleteSql); + } + + @SuppressWarnings("unchecked") + @Override + public PageEntity loadTousseAssociationList(PageEntity pageEntity, String spell) { + if(pageEntity == null){ + return pageEntity; + } + String where = "where 1=1 "; + if(StringUtils.isNotBlank(spell)){ + where += " and (po.name like '%" + spell + "%'" + + " or po.remark like '%" + spell + "%'" + + " or po.id in (select tousseAssociationId from " + TousseAssociationDetail.class.getSimpleName() + + " where tousseDefinitionId in (select id from " + TousseDefinition.class.getSimpleName() + + " where name like '%" + spell + "%' and id = ancestorID)))"; + } + String countSql = String.format("select count(1) from %s po %s", TousseAssociation.class.getSimpleName(), where); + int count = objectDao.countBySql(countSql); + pageEntity.setCount(count); + if(count > 0){ + String hql = String.format("select po from %s po %s order by po.sequence ", TousseAssociation.class.getSimpleName(), where); + List list = objectDao.findByHql(hql, pageEntity.getStart(), pageEntity.getLimit()); + if(CollectionUtils.isNotEmpty(list)){ + searchAssociationTousseDefinition(list); + pageEntity.setList(list); + } + } + return pageEntity; + } + + /** + * 查询“器械包关联设置”关联的器械包定义ID和名称 + * @param list + */ + private void searchAssociationTousseDefinition(List list) { + if(CollectionUtils.isEmpty(list)){ + return; + } + Set tousseAssociationIdSet = new HashSet(); + for (TousseAssociation ta : list) { + tousseAssociationIdSet.add(ta.getId()); + } + if(CollectionUtils.isEmpty(tousseAssociationIdSet)){ + return; + } + + //器械包关联设置ID和包定义ID包定义名称的map + Map> tousseAssociationIdTousseDefinitionIDNameMap = loadTousseAssociationIdTousseDefinitionIDNameMap(tousseAssociationIdSet); + if(MapUtils.isEmpty(tousseAssociationIdTousseDefinitionIDNameMap)){ + return; + } + for (TousseAssociation ta : list) { + Long taID = ta.getId(); + Map tousseIDNameMap = tousseAssociationIdTousseDefinitionIDNameMap.get(taID); + if(MapUtils.isEmpty(tousseIDNameMap)){ + continue; + } + Set tousseIdSet = tousseIDNameMap.keySet(); + Collection tousseNameColl = tousseIDNameMap.values(); + ta.setTousseDefinitionIds(StringTools.join(tousseIdSet, ";")); + ta.setTousseDefinitionNames(StringTools.join(tousseNameColl, ";")); + } + } + + /** + * 器械包关联设置ID和包定义ID包定义名称的map + * @param tousseAssociationIdSet + * @return + */ + private Map> loadTousseAssociationIdTousseDefinitionIDNameMap(Set tousseAssociationIdSet) { + Map> tousseAssociationIdTousseDefinitionIDNameMap = new HashMap>(); + String sql = String.format("select ta.id taId, td.id tdId, td.name " + + "from %s ta " + + "join %s tad on ta.id = tad.tousseAssociationId " + + "join %s td on td.id = tad.tousseDefinitionId where %s", + TousseAssociation.class.getSimpleName(), + TousseAssociationDetail.class.getSimpleName(), + TousseDefinition.class.getSimpleName(), + SqlUtils.getNonStringFieldInLargeCollectionsPredicate("ta.id", tousseAssociationIdSet)); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql); + while(rs.next()){ + Long taId = rs.getLong("taId"); + Long tdId = rs.getLong("tdId"); + String tdName = rs.getString("name"); + Map tousseDefinitionIDNameMap = tousseAssociationIdTousseDefinitionIDNameMap.get(taId); + if(tousseDefinitionIDNameMap == null){ + tousseDefinitionIDNameMap = new LinkedHashMap(); + } + tousseDefinitionIDNameMap.put(tdId, tdName); + tousseAssociationIdTousseDefinitionIDNameMap.put(taId, tousseDefinitionIDNameMap); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return tousseAssociationIdTousseDefinitionIDNameMap; + } + + @Override + public void sortTousseAssociation(TousseAssociation tousseAssociation, String orderType) { + if(tousseAssociation == null || !DatabaseUtil.isPoIdValid(tousseAssociation.getId())){ + throw new RuntimeException("参数异常!"); + } + + TousseAssociation nextTousseAssociation = getNextTousseAssociation(tousseAssociation, orderType); + if(nextTousseAssociation == null){ + return; + } + Integer sequence = tousseAssociation.getSequence(); + tousseAssociation.setSequence(nextTousseAssociation.getSequence()); + nextTousseAssociation.setSequence(sequence); + + objectDao.saveOrUpdate(nextTousseAssociation); + objectDao.saveOrUpdate(tousseAssociation); + } + + @SuppressWarnings("unchecked") + private TousseAssociation getNextTousseAssociation(TousseAssociation tousseAssociation, String orderType) { + + if(tousseAssociation == null || !DatabaseUtil.isPoIdValid(tousseAssociation.getId())){ + return null; + } + + if (!(orderType.equalsIgnoreCase("up") || orderType.equalsIgnoreCase("down"))) { + return null; + } + + String sql = "where 1=1 "; + String orderField = " sequence DESC"; + if (orderType.equalsIgnoreCase("up")) + sql += "and (po.sequence < " + + tousseAssociation.getSequence() + ")"; + else { + sql += "and (po.sequence > " + + tousseAssociation.getSequence() + ")"; + orderField = " sequence asc"; + } + + List list = objectDao.findBySql(TousseAssociation.class.getSimpleName(), sql, 0, 1, orderField); + if (list == null || list.size() == 0) { + return null; + } + return list.get(0); + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseAssociation.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseAssociation.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseAssociation.java (revision 37397) @@ -0,0 +1,102 @@ +package com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Transient; + +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +/** + * “器械包关联设置”BJDXZLYY-46 + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class TousseAssociation { + + private Long id; + + /** + * “器械包关联设置”的名称 + */ + private String name; + + /** + * 备注 + */ + private String remark; + + /** + * 顺序 + */ + private Integer sequence; + + /** + * 关联的包定义ID + */ + private String tousseDefinitionIds; + + /** + * 关联的包定义名称 + */ + private String tousseDefinitionNames; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getRemark() { + return remark; + } + + public void setRemark(String remark) { + this.remark = remark; + } + + public Integer getSequence() { + return sequence; + } + + public void setSequence(Integer sequence) { + this.sequence = sequence; + } + + @Transient + public String getTousseDefinitionIds() { + return tousseDefinitionIds; + } + + public void setTousseDefinitionIds(String tousseDefinitionIds) { + this.tousseDefinitionIds = tousseDefinitionIds; + } + + @Transient + public String getTousseDefinitionNames() { + return tousseDefinitionNames; + } + + public void setTousseDefinitionNames(String tousseDefinitionNames) { + this.tousseDefinitionNames = tousseDefinitionNames; + } + +} Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/TousseAssociationManager.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/TousseAssociationManager.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/warehouse/service/TousseAssociationManager.java (revision 37397) @@ -0,0 +1,41 @@ +package com.forgon.disinfectsystem.basedatamanager.warehouse.service; + +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseAssociation; +import com.forgon.entity.PageEntity; +import com.forgon.tools.hibernate.BasePoManager; + +/** + * “器械包关联设置”BJDXZLYY-46 + */ +public interface TousseAssociationManager extends BasePoManager { + + /** + * 保存或者修改“器械包关联设置” + * @param tousseAssociation + * @param tousseDefinitionIds + */ + public void saveOrUpdateTousseAssociation(TousseAssociation tousseAssociation, String tousseDefinitionIds); + + /** + * 删除“器械包关联设置” + * @param ids 1;2;3 + */ + public void deleteTousseAssociation(String ids); + + /** + * 加载“器械包关联设置”列表 + * @param pageEntity + * @param spell + * @return + */ + public PageEntity loadTousseAssociationList(PageEntity pageEntity, String spell); + + /** + * “器械包关联设置”排序 + * @param tousseAssociation + * @param orderType up/down + */ + public void sortTousseAssociation(TousseAssociation tousseAssociation, + String orderType); + +} Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/service/OperationReservationManager.java =================================================================== diff -u -r36602 -r37397 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/service/OperationReservationManager.java (.../OperationReservationManager.java) (revision 36602) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/operationreservation/service/OperationReservationManager.java (.../OperationReservationManager.java) (revision 37397) @@ -7,9 +7,11 @@ import javax.servlet.ServletOutputStream; +import net.sf.json.JSONArray; import net.sf.json.JSONObject; import com.forgon.disinfectsystem.entity.basedatamanager.operationNameManager.OperationUseTousseItem; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.operationreservation.OperationReservation; import com.forgon.disinfectsystem.inventorymanagement.model.HrpInvoicePlan; import com.forgon.disinfectsystem.operationreservation.vo.OperationReservationGroupVo; @@ -114,5 +116,12 @@ * @return */ public Map>> loadOperationReservationTousseStorageInfo(OperationReservation po); + + /** + * 查询当前手术预约单中,待发货,并且在申请科室的库位中的物品BJDXZLYY-46 + * @param id + * @return + */ + public JSONArray loadOperationReservationStorageTousse(String id); } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseAssociationDetail.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseAssociationDetail.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/toussedefinition/TousseAssociationDetail.java (revision 37397) @@ -0,0 +1,66 @@ +package com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Index; +import javax.persistence.Table; + +import org.hibernate.annotations.Cache; +import org.hibernate.annotations.CacheConcurrencyStrategy; +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +/** + * “器械包关联设置”关联的器械包定义明细BJDXZLYY-46 + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Table(name = "TousseAssociationDetail",indexes = { +@Index(columnList = "tousseDefinitionId", name = "tsad_tdid_index"), +@Index(columnList = "tousseAssociationId", name = "tsad_tsaid_index") +}) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class TousseAssociationDetail { + + private Long id; + + /** + * “器械包关联设置”ID + */ + private Long tousseAssociationId; + + /** + * 器械包定义的ID + */ + private Long tousseDefinitionId; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getTousseAssociationId() { + return tousseAssociationId; + } + + public void setTousseAssociationId(Long tousseAssociationId) { + this.tousseAssociationId = tousseAssociationId; + } + + public Long getTousseDefinitionId() { + return tousseDefinitionId; + } + + public void setTousseDefinitionId(Long tousseDefinitionId) { + this.tousseDefinitionId = tousseDefinitionId; + } + +}