Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/departmentapplicationtemplate/action/DepartmentAppTemplateAction.java =================================================================== diff -u -r34574 -r41415 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/departmentapplicationtemplate/action/DepartmentAppTemplateAction.java (.../DepartmentAppTemplateAction.java) (revision 34574) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/departmentapplicationtemplate/action/DepartmentAppTemplateAction.java (.../DepartmentAppTemplateAction.java) (revision 41415) @@ -396,6 +396,9 @@ } } } + if(!DatabaseUtil.isPoIdValid(appTemplate.getId())){ + appTemplate.setOrderNum(departmentAppTemplateManager.getMaxOrderNum() + 1); + } appTemplate.setTousseDefinitionTemplateItems(toussedefinitionTemplate); appTemplate.setDiposableGoodsTemplateItems(diposableGoodsList); appTemplate.setOrgUnitCode(departmentIds); @@ -432,6 +435,7 @@ newAppTemplate.setOrgUnitCode(appTemplate.getOrgUnitCode()); newAppTemplate.setSequence(appTemplate.getSequence()); newAppTemplate.setTemplateType(appTemplate.getTemplateType()); + newAppTemplate.setOrderNum(departmentAppTemplateManager.getMaxOrderNum() + 1); //可以申请的一次性物品 List originalDiposableGoodsTemplateItems = appTemplate.getDiposableGoodsTemplateItems(); @@ -667,6 +671,23 @@ StrutsResponseUtils.output(result); } } + + /** + * 器械包申请模板排序 + */ + public void sortDepartTousseApplyTemplate(){ + JSONObject result = JSONUtil.buildJsonObject(true); + try { + Long departTousseApplyTemplateId = StrutsParamUtils.getPraramLongValue("departTousseApplyTemplateId", null); + //up/down/top/bottom + String orderType = StrutsParamUtils.getPraramValue("orderType", null); + departmentAppTemplateManager.sortDepartTousseApplyTemplate(departTousseApplyTemplateId, orderType); + } catch (Exception e) { + e.printStackTrace(); + result = JSONUtil.buildJsonObject(false, e.getMessage()); + } + StrutsResponseUtils.output(result); + } @Override public void prepare() throws Exception { Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/departmentapplicationtemplate/service/DepartmentAppTemplateManager.java =================================================================== diff -u -r29041 -r41415 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/departmentapplicationtemplate/service/DepartmentAppTemplateManager.java (.../DepartmentAppTemplateManager.java) (revision 29041) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/departmentapplicationtemplate/service/DepartmentAppTemplateManager.java (.../DepartmentAppTemplateManager.java) (revision 41415) @@ -110,8 +110,21 @@ List items, double diposablePriceFloatPercent, String specifyDisposableTypes); /** - * 机械包定义模板按照SortNumber排序 + * 器械包定义模板按照SortNumber排序 * @param items */ void sortTousseTemplateItems(List items); + + /** + * 科室申请模版排序 + * @param departTousseApplyTemplateId + * @param orderType + */ + public void sortDepartTousseApplyTemplate(Long departTousseApplyTemplateId, String orderType); + + /** + * 返回最大排序序号 + * @return 最大排序序号 + */ + public Integer getMaxOrderNum(); } Index: ssts-web/src/main/webapp/dataUpdater/sqls/5.0.52_5.0.53.sql =================================================================== diff -u --- ssts-web/src/main/webapp/dataUpdater/sqls/5.0.52_5.0.53.sql (revision 0) +++ ssts-web/src/main/webapp/dataUpdater/sqls/5.0.52_5.0.53.sql (revision 41415) @@ -0,0 +1 @@ +update DepartmentAppTemplate set orderNum = (select count(*) from DepartmentAppTemplate po where po.id <= DepartmentAppTemplate.id); \ No newline at end of file Index: forgon-tools/src/main/java/com/forgon/Constants.java =================================================================== diff -u -r41393 -r41415 --- forgon-tools/src/main/java/com/forgon/Constants.java (.../Constants.java) (revision 41393) +++ forgon-tools/src/main/java/com/forgon/Constants.java (.../Constants.java) (revision 41415) @@ -29,7 +29,7 @@ "4.9.63","4.9.64","4.9.65","4.9.66","4.9.67","4.9.68","4.9.69","4.9.70","4.9.71","4.9.72","4.9.73","4.9.74","4.9.75","4.9.76","4.9.77","4.9.78","4.9.79","4.9.80","4.9.81","4.9.82","4.9.83","4.9.84","4.9.85", "4.9.86","4.9.87","4.9.88","4.9.89","4.9.90","4.9.91","4.9.92","4.9.93","4.9.94","4.9.95","4.9.96","4.9.97","4.9.98","4.9.99","5.0.0","5.0.1","5.0.2","5.0.3","5.0.4","5.0.5","5.0.6","5.0.7", "5.0.8","5.0.9","5.0.10","5.0.11","5.0.12","5.0.13","5.0.14","5.0.15","5.0.16","5.0.17","5.0.18","5.0.19","5.0.20","5.0.21","5.0.22","5.0.23","5.0.24","5.0.25","5.0.26","5.0.27","5.0.28","5.0.29","5.0.30","5.0.31", - "5.0.32","5.0.33","5.0.34","5.0.35","5.0.36","5.0.37","5.0.38","5.0.39","5.0.40","5.0.41","5.0.42","5.0.43","5.0.44","5.0.45","5.0.46","5.0.47","5.0.48","5.0.49","5.0.50","5.0.51","5.0.52"}; + "5.0.32","5.0.33","5.0.34","5.0.35","5.0.36","5.0.37","5.0.38","5.0.39","5.0.40","5.0.41","5.0.42","5.0.43","5.0.44","5.0.45","5.0.46","5.0.47","5.0.48","5.0.49","5.0.50","5.0.51","5.0.52","5.0.53"}; // 版本列表(4.0版本升级4.1版需要分两步:先从4.0升到4.1.0、然后从4.1.0升级4.1最新版本) /*public final static String[] SOFTWARE_VERSION_ARRAY = new String[] { Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/departmentapplicationtemplate/DepartmentAppTemplate.java =================================================================== diff -u -r39250 -r41415 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/departmentapplicationtemplate/DepartmentAppTemplate.java (.../DepartmentAppTemplate.java) (revision 39250) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/departmentapplicationtemplate/DepartmentAppTemplate.java (.../DepartmentAppTemplate.java) (revision 41415) @@ -61,10 +61,17 @@ /** * 序号 + * (用户页面自定义编辑的序号,相同科室有不同申领模板时,加载的模板会按序号排序) */ public Integer sequence; /** + * 排序序号 + * 列表排序的序号,保存时有后端代码生成,可以在页面根据排序按钮调整GDSKQYY-29 + */ + public Integer orderNum = 1; + + /** * 维护科室id * (GDSZYY-17 临床科室可维护并且只能维护自己科室的申领模板) */ @@ -172,6 +179,14 @@ this.sequence = sequence; } + public Integer getOrderNum() { + return orderNum; + } + + public void setOrderNum(Integer orderNum) { + this.orderNum = orderNum; + } + public Long getMaintenanceDepartId() { return maintenanceDepartId; } Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/departmentapplicationtemplate/service/DepartmentAppTemplateManagerImpl.java =================================================================== diff -u -r38737 -r41415 --- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/departmentapplicationtemplate/service/DepartmentAppTemplateManagerImpl.java (.../DepartmentAppTemplateManagerImpl.java) (revision 38737) +++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/departmentapplicationtemplate/service/DepartmentAppTemplateManagerImpl.java (.../DepartmentAppTemplateManagerImpl.java) (revision 41415) @@ -25,20 +25,22 @@ import com.forgon.directory.model.CssdHandleTousses; import com.forgon.directory.model.CssdServiceDepts; import com.forgon.directory.model.OrgUnit; +import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; import com.forgon.disinfectsystem.common.CssdUtils; -import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodBatchStockManager; import com.forgon.disinfectsystem.diposablegoods.service.DiposableGoodsManager; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsStock; import com.forgon.disinfectsystem.entity.basedatamanager.departmentapplicationtemplate.DepartmentAppTemplate; import com.forgon.disinfectsystem.entity.basedatamanager.departmentapplicationtemplate.DiposableGoodsTemplateItem; import com.forgon.disinfectsystem.entity.basedatamanager.departmentapplicationtemplate.TousseDefinitionTemplateItem; +import com.forgon.disinfectsystem.entity.basedatamanager.supplyroomconfig.SupplyRoomConfig; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingItem; import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingRecord; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseDefinitionManager; import com.forgon.exception.SystemException; +import com.forgon.security.service.OperationManager; import com.forgon.tools.MathTools; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.BasePoManagerImpl; @@ -49,24 +51,29 @@ public class DepartmentAppTemplateManagerImpl extends BasePoManagerImpl implements DepartmentAppTemplateManager { - private DiposableGoodBatchStockManager diposableGoodBatchStockManager; - private TousseDefinitionManager tousseDefinitionManager; private DiposableGoodsManager diposableGoodsManager; private DateQueryAdapter dateQueryAdapter; + private SupplyRoomConfigManager supplyRoomConfigManager; + + private OperationManager operationManager; + + public void setOperationManager(OperationManager operationManager) { + this.operationManager = operationManager; + } + + public void setSupplyRoomConfigManager(SupplyRoomConfigManager supplyRoomConfigManager) { + this.supplyRoomConfigManager = supplyRoomConfigManager; + } + public void setTousseDefinitionManager( TousseDefinitionManager tousseDefinitionManager) { this.tousseDefinitionManager = tousseDefinitionManager; } - public void setDiposableGoodBatchStockManager( - DiposableGoodBatchStockManager diposableGoodBatchStockManager) { - this.diposableGoodBatchStockManager = diposableGoodBatchStockManager; - } - public void setObjectDao(ObjectDao objectDao) { this.objectDao = objectDao; } @@ -818,4 +825,107 @@ return null; } + @Override + public void sortDepartTousseApplyTemplate(Long departTousseApplyTemplateId, String orderType) { + if(!DatabaseUtil.isPoIdValid(departTousseApplyTemplateId)){ + throw new RuntimeException("申请模板ID无效!"); + } + DepartmentAppTemplate departTousseApplyTemplate = this.get(departTousseApplyTemplateId); + if(departTousseApplyTemplate == null){ + throw new RuntimeException("申请模板ID无效!"); + } + DepartmentAppTemplate nextDepartTousseApplyTemplate = getNextDepartTousseApplyTemplate(departTousseApplyTemplate, orderType); + if(nextDepartTousseApplyTemplate == null){ + return; + } + Integer orderNum = departTousseApplyTemplate.getOrderNum(); + departTousseApplyTemplate.setOrderNum(nextDepartTousseApplyTemplate.getOrderNum()); + nextDepartTousseApplyTemplate.setOrderNum(orderNum); + objectDao.saveOrUpdate(departTousseApplyTemplate); + objectDao.saveOrUpdate(nextDepartTousseApplyTemplate); + } + + /** + * 查询待交换顺序的模板 + * @param departTousseApplyTemplate 科室申请模板 + * @param orderType 排序类型 + * @return 待交换顺序的模板 + */ + @SuppressWarnings("unchecked") + private DepartmentAppTemplate getNextDepartTousseApplyTemplate(DepartmentAppTemplate departTousseApplyTemplate, String orderType) { + if(departTousseApplyTemplate == null || !DatabaseUtil.isPoIdValid(departTousseApplyTemplate.getId())){ + return null; + } + if (!(orderType.equalsIgnoreCase("up") || orderType.equalsIgnoreCase("down") + || orderType.equalsIgnoreCase("top") || orderType.equalsIgnoreCase("bottom"))) { + return null; + } + String sql = "where 1=1 "; + + String orgunitCode = AcegiHelper.getCurrentOrgUnitCode(); + SupplyRoomConfig config = supplyRoomConfigManager.getFirstSupplyRoomConfig(); + // 是否一级供应室 + boolean isSupplyRoom = false; + if (config != null && StringUtils.isNotBlank(config.getOrgUnitCoding())) { + if (orgunitCode.equals(config.getOrgUnitCoding())) { + isSupplyRoom = true; + } + } + // 如果用户拥有【管理所有科室申领模板】的权限,或者是一级供应室的用户,则列出系统中定义的所有模板。 + // 否则,只显示模板的【维护科室】与用户当前登录科室相同的模板。 + String maintenanceDepartSql = ""; + if(!isSupplyRoom && !operationManager.isCurrentUserHaveAnyOperation("SSTS_departMentApplication_ManageAll")){ + List orgUnitList = objectDao.findByProperty(OrgUnit.class.getSimpleName(), "orgUnitCoding", orgunitCode); + if(CollectionUtils.isNotEmpty(orgUnitList)){ + maintenanceDepartSql = " and maintenanceDepartId = " + orgUnitList.get(0).getId(); + } else { + maintenanceDepartSql = " and maintenanceDepartId is null "; + } + } + + String orderField = " "; + if (orderType.equalsIgnoreCase("up")){ + sql += "and (po.orderNum < " + + departTousseApplyTemplate.getOrderNum() + ")"; + sql += maintenanceDepartSql; + orderField = " orderNum DESC"; + }else if(orderType.equalsIgnoreCase("down")){ + sql += "and (po.orderNum > " + + departTousseApplyTemplate.getOrderNum() + ")"; + sql += maintenanceDepartSql; + orderField = " orderNum asc"; + }else if(orderType.equalsIgnoreCase("top")){ + sql += "and po.orderNum = (select min(orderNum) from DepartmentAppTemplate where 1=1 " + maintenanceDepartSql + ") "; + }else if(orderType.equalsIgnoreCase("bottom")){ + sql += "and po.orderNum = (select max(orderNum) from DepartmentAppTemplate where 1=1 " + maintenanceDepartSql + ") "; + } + + sql += " and po.id <> " + departTousseApplyTemplate.getId(); + + List departmentAppTemplateList = objectDao.findBySql(DepartmentAppTemplate.class.getSimpleName(), sql, 0, 1, orderField); + if(CollectionUtils.isEmpty(departmentAppTemplateList)){ + return null; + } + + return departmentAppTemplateList.get(0); + } + + @Override + public Integer getMaxOrderNum() { + String sql = String.format("select max(orderNum) maxOrderNum from %s ", DepartmentAppTemplate.class.getSimpleName()); + ResultSet rs = null; + int maxOrderNum = 0; + try { + rs = objectDao.executeSql(sql); + while(rs.next()){ + maxOrderNum = rs.getInt("maxOrderNum"); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + return maxOrderNum; + } + }