Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/supplyroomconfig/action/SupplyRoomConfigAction.java =================================================================== diff -u -r34101 -r34520 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/supplyroomconfig/action/SupplyRoomConfigAction.java (.../SupplyRoomConfigAction.java) (revision 34101) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/supplyroomconfig/action/SupplyRoomConfigAction.java (.../SupplyRoomConfigAction.java) (revision 34520) @@ -1825,6 +1825,10 @@ JSONObject obj = new JSONObject(); obj.put("id", supplyRoomConfig.getId()); obj.put("departId", supplyRoomConfig.getOrgUnitCoding()); + OrgUnit orgUnit = orgUnitManager.getByCode(supplyRoomConfig.getOrgUnitCoding()); + if(orgUnit != null){ + obj.put("orgUnitId", orgUnit.getId()); + } obj.put("name", supplyRoomConfig.getOrgUnitName()); obj.put("sequence", supplyRoomConfig.getSequence()); obj.put("spell", supplyRoomConfig.getSpelling()); Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/sterilizergroup/action/SterilizerGroupHttpOptionAction.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/sterilizergroup/action/SterilizerGroupHttpOptionAction.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/sterilizergroup/action/SterilizerGroupHttpOptionAction.java (revision 34520) @@ -0,0 +1,213 @@ +package com.forgon.disinfectsystem.basedatamanager.sterilizergroup.action; + +import java.sql.ResultSet; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import net.sf.json.JsonConfig; +import net.sf.json.util.CycleDetectionStrategy; + +import org.apache.commons.collections.CollectionUtils; +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.directory.model.OrgUnit; +import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.SterilizerGroupOrgunit; +import com.forgon.systemsetting.model.HttpOption; +import com.forgon.systemsetting.service.HttpOptionManager; +import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.StrutsResponseUtils; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.json.JSONUtil; +import com.forgon.tools.string.StringTools; +import com.forgon.tools.util.SqlUtils; +import com.opensymphony.xwork2.ModelDriven; +import com.opensymphony.xwork2.Preparable; + +@ParentPackage(value = "default") +@Namespace(value = "/disinfectSystem/baseData") +@Action(value = "sterilizerGroupHttpOptionAction") +public class SterilizerGroupHttpOptionAction implements ModelDriven, Preparable { + + private HttpOption sterilizerGroupHttpOption; + + private ObjectDao objectDao; + + private HttpOptionManager httpOptionManager; + + public void setHttpOptionManager(HttpOptionManager httpOptionManager) { + this.httpOptionManager = httpOptionManager; + } + + public void setObjectDao(ObjectDao objectDao) { + this.objectDao = objectDao; + } + + /** + * 加载灭菌炉分组列表 + */ + public void loadSterilizerGroupHttpOption(){ + List sterilizerGroupList = new ArrayList(); + JSONObject result = JSONUtil.buildJsonObject(true); + try { + String id = StrutsParamUtils.getPraramValue("id", ""); + String searchKeyWord = StrutsParamUtils.getPraramValue("searchKeyWord", ""); + if(DatabaseUtil.isPoIdValid(id)){ + HttpOption sterilizerGroup = httpOptionManager.get(id); + sterilizerGroupList.add(sterilizerGroup); + }else{ + sterilizerGroupList = httpOptionManager.loadSterilizerGroupHttpOption(searchKeyWord); + } + + JsonConfig config = new JsonConfig(); + config.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT); + Map map = new HashMap(); + map.put("success", true); + map.put("data", sterilizerGroupList); + result = JSONObject.fromObject(map, config); + //查询灭菌分组所属科室 + result = searchSterilizerGroupOrgunit(result); + } catch (Exception e) { + e.printStackTrace(); + result = JSONUtil.buildJsonObject(false, "加载失败:" + e.getMessage()); + } + StrutsResponseUtils.output(result.toString()); + } + + /** + * 查询灭菌分组所属科室 + * @param result + * @return + */ + private JSONObject searchSterilizerGroupOrgunit(JSONObject result) { + + if(result == null){ + return result; + } + + JSONArray data = result.optJSONArray("data"); + if(data == null || data.size() == 0){ + return result; + } + + List sterilizerGroupIdList = new ArrayList(); + for(int i=0;i> orgUnitNameMap = new HashMap>(); + ResultSet rs = null; + try { + rs = objectDao.executeSql(sql); + while(rs.next()){ + String orgName = rs.getString("name"); + Long sterilizerGroupId = rs.getLong("sterilizerGroupId"); + List orgNameList = orgUnitNameMap.get(sterilizerGroupId); + if(orgNameList == null){ + orgNameList = new ArrayList(); + } + orgNameList.add(orgName); + orgUnitNameMap.put(sterilizerGroupId, orgNameList); + } + } catch (Exception e) { + e.printStackTrace(); + } finally { + DatabaseUtil.closeResultSetAndStatement(rs); + } + + for(int i=0;i orgNameList = orgUnitNameMap.get(sterilizerGroupId); + String sterilizerGroupOrgunit = StringTools.join(orgNameList, ";"); + json.put("sterilizerGroupOrgunit", StringTools.defaultString(sterilizerGroupOrgunit)); + } + + return result; + } + + /** + * 保存灭菌炉分组 + */ + public void saveSterilizerGroupHttpOption(){ + JSONObject result = JSONUtil.buildJsonObject(true, "保存成功"); + try { + String orgunitIds = StrutsParamUtils.getPraramValue("orgunitIds", ""); + httpOptionManager.saveSterilizerGroupHttpOption(sterilizerGroupHttpOption, orgunitIds); + } catch (Exception e) { + e.printStackTrace(); + result = JSONUtil.buildJsonObject(false, "保存失败:" + e.getMessage()); + } + StrutsResponseUtils.output(result.toString()); + } + + /** + * 灭菌炉分组设置 排序 + */ + public void sortSterilizerGroupHttpOption(){ + JSONObject result = JSONUtil.buildJsonObject(true); + //up/down + String orderType = StrutsParamUtils.getPraramValue("orderType", null); + try { + Long id = StrutsParamUtils.getPraramLongValue("id", null); + if(DatabaseUtil.isPoIdValid(id)){ + HttpOption httpOption = httpOptionManager.get(id); + httpOptionManager.sortHttpOption(httpOption, orderType); + } + } catch (Exception e) { + result = JSONUtil.buildJsonObject(false, "操作失败:" + e.getMessage()); + } + StrutsResponseUtils.output(result); + } + + /** + * 删除灭菌炉分组设置 + */ + public void deleteSterilizerGroupHttpOption(){ + JSONObject result = JSONUtil.buildJsonObject(true, "删除成功"); + try { + String ids = StrutsParamUtils.getPraramValue("ids", null); + if(StringUtils.isNotBlank(ids)){ + List httpOptionList = httpOptionManager.getCollection(ids, ";"); + if(CollectionUtils.isEmpty(httpOptionList)){ + throw new RuntimeException("数据不存在"); + } + for (HttpOption httpOption2 : httpOptionList) { + httpOptionManager.delete(httpOption2); + } + } + } catch (Exception e) { + result = JSONUtil.buildJsonObject(false, "删除失败:" + e.getMessage()); + } + StrutsResponseUtils.output(result); + } + + @Override + public void prepare() throws Exception { + String id = StrutsParamUtils.getPraramValue("id", ""); + if (StringUtils.isNotBlank(id) && !id.equals("0")) { + sterilizerGroupHttpOption = httpOptionManager.get(id); + } else { + sterilizerGroupHttpOption = new HttpOption(); + sterilizerGroupHttpOption.setOptionListId(HttpOption.SYSTEMSETTING_STERILIZER_GROUP); + } + } + + @Override + public HttpOption getModel() { + return sterilizerGroupHttpOption; + } + +} Index: forgon-core/src/main/java/com/forgon/systemsetting/service/HttpOptionManager.java =================================================================== diff -u -r34419 -r34520 --- forgon-core/src/main/java/com/forgon/systemsetting/service/HttpOptionManager.java (.../HttpOptionManager.java) (revision 34419) +++ forgon-core/src/main/java/com/forgon/systemsetting/service/HttpOptionManager.java (.../HttpOptionManager.java) (revision 34520) @@ -95,4 +95,27 @@ * @param ids */ public void deleteSterilizationPurposeHttpOption(String ids); + + /** + * 根据查询条件查询灭菌炉分组 + * @param serarchString + * @return + */ + public List loadSterilizerGroupHttpOption(String serarchString); + + /** + * 保存灭菌炉分组 + * @param sterilizerGroup + * @param orgunitIds + */ + public void saveSterilizerGroupHttpOption(HttpOption sterilizerGroup, + String orgunitIds); + + /** + * 获取当前科室的灭菌炉分组 + * @param orgUnitCode + * @return + */ + public List getSterilizerGroupHttpOption(String orgUnitCode); + } Index: ssts-web/src/main/webapp/dataUpdater/sqls/4.9.97_4.9.98_oracle.sql =================================================================== diff -u -r34359 -r34520 --- ssts-web/src/main/webapp/dataUpdater/sqls/4.9.97_4.9.98_oracle.sql (.../4.9.97_4.9.98_oracle.sql) (revision 34359) +++ ssts-web/src/main/webapp/dataUpdater/sqls/4.9.97_4.9.98_oracle.sql (.../4.9.97_4.9.98_oracle.sql) (revision 34520) @@ -1 +1,2 @@ -update Sterilisation set sterilizationPurposeid = (select max(id) from HttpOption where optionText = Sterilisation.sterilizationPurpose and optionListId = 'sterilizationPurpose') where sterilizationPurposeid is null and sterilizationPurpose is not null; \ No newline at end of file +update Sterilisation set sterilizationPurposeid = (select max(id) from HttpOption where optionText = Sterilisation.sterilizationPurpose and optionListId = 'sterilizationPurpose') where sterilizationPurposeid is null and sterilizationPurpose is not null; +insert into SterilizerGroupOrgunit (id, sterilizerGroupId, orgUnitId) select HIBERNATE_SEQUENCE.Nextval,ho.id, org.id from HttpOption ho, (select ou.id from SupplyRoomConfig src join OrgUnit ou on ou.orgUnitCoding = src.orgUnitCoding where src.supplyRoomType in (1,2)) org where ho.optionListId = 'sterilerGroup'; \ No newline at end of file Index: ssts-web/src/main/webapp/dataUpdater/sqls/4.9.97_4.9.98_sqlserver.sql =================================================================== diff -u -r34359 -r34520 --- ssts-web/src/main/webapp/dataUpdater/sqls/4.9.97_4.9.98_sqlserver.sql (.../4.9.97_4.9.98_sqlserver.sql) (revision 34359) +++ ssts-web/src/main/webapp/dataUpdater/sqls/4.9.97_4.9.98_sqlserver.sql (.../4.9.97_4.9.98_sqlserver.sql) (revision 34520) @@ -1 +1,2 @@ -update Sterilisation set sterilizationPurposeid = (select max(id) from HttpOption where optionText = Sterilisation.sterilizationPurpose and optionListId = 'sterilizationPurpose') where sterilizationPurposeid is null and sterilizationPurpose is not null; \ No newline at end of file +update Sterilisation set sterilizationPurposeid = (select max(id) from HttpOption where optionText = Sterilisation.sterilizationPurpose and optionListId = 'sterilizationPurpose') where sterilizationPurposeid is null and sterilizationPurpose is not null; +insert into SterilizerGroupOrgunit (sterilizerGroupId, orgUnitId) select ho.id, org.id from HttpOption ho, (select ou.id from SupplyRoomConfig src join OrgUnit ou on ou.orgUnitCoding = src.orgUnitCoding where src.supplyRoomType in (1,2)) org where ho.optionListId = 'sterilerGroup'; \ No newline at end of file Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/systemsetting/service/HttpOptionManagerSSTSImpl.java =================================================================== diff -u -r34419 -r34520 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/systemsetting/service/HttpOptionManagerSSTSImpl.java (.../HttpOptionManagerSSTSImpl.java) (revision 34419) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/systemsetting/service/HttpOptionManagerSSTSImpl.java (.../HttpOptionManagerSSTSImpl.java) (revision 34520) @@ -3,6 +3,7 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.LinkedList; import java.util.List; @@ -14,11 +15,14 @@ import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.StringUtils; +import com.forgon.directory.model.OrgUnit; +import com.forgon.directory.service.OrgUnitManager; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsStock; import com.forgon.disinfectsystem.entity.basedatamanager.expirationdateinfo.ExpirationDateInfo; import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.sterilisation.Sterilisation; +import com.forgon.disinfectsystem.entity.basedatamanager.sterilizer.SterilizerGroupOrgunit; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; import com.forgon.exception.SystemException; @@ -27,6 +31,7 @@ import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.BasePoManagerImpl; import com.forgon.tools.json.JSONUtil; +import com.forgon.tools.string.StringTools; import com.forgon.tools.util.SqlUtils; /** @@ -36,6 +41,12 @@ */ public class HttpOptionManagerSSTSImpl extends BasePoManagerImpl implements HttpOptionManager { + private OrgUnitManager orgUnitManager; + + public void setOrgUnitManager(OrgUnitManager orgUnitManager) { + this.orgUnitManager = orgUnitManager; + } + public HttpOptionManagerSSTSImpl() { super(HttpOption.class); } @@ -636,4 +647,65 @@ //... } } + + @Override + public List loadSterilizerGroupHttpOption(String serarchString) { + String sql = String.format("select po from %s po where po.optionListId = '%s'", + HttpOption.class.getSimpleName(), HttpOption.SYSTEMSETTING_STERILIZER_GROUP); + if(StringUtils.isNotBlank(serarchString)){ + sql += " and (po.optionText like '%" + serarchString + "%' or po.id in (select sterilizerGroupId from SterilizerGroupOrgunit where orgUnitId in (select id from OrgUnit where name like '% " + serarchString + "%')))"; + } + sql += " order by po.sequence "; + return this.objectDao.findByHql(sql); + } + + @Override + public void saveSterilizerGroupHttpOption(HttpOption sterilizerGroup, String orgunitIds) { + //保存灭菌炉分组 + this.save(sterilizerGroup); + //保存灭菌炉分组所属科室 + saveSterilizerGroupOrgUnit(sterilizerGroup, orgunitIds); + } + + /** + * 保存灭菌炉分组所属科室 + * @param sterilizerGroup + * @param orgunitIds + */ + private void saveSterilizerGroupOrgUnit(HttpOption sterilizerGroup, String orgunitIds) { + if(sterilizerGroup != null && DatabaseUtil.isPoIdValid(sterilizerGroup.getId()) + && StringUtils.isNotBlank(orgunitIds)){ + List orgUnitList = new ArrayList(); + if(StringUtils.equals(orgunitIds, "全部")){ + String sql = " po.orgUnitCoding in (select orgUnitCoding from SupplyRoomConfig where supplyRoomType in (1,2))"; + orgUnitList = orgUnitManager.getByHql(sql); + }else{ + Collection idList = StringTools.parseToLongs(orgunitIds, ";"); + orgUnitList = orgUnitManager.getCollection(idList); + } + if(CollectionUtils.isNotEmpty(orgUnitList)){ + String deleteSql = String.format("delete from %s where sterilizerGroupId = %s", SterilizerGroupOrgunit.class.getSimpleName(), sterilizerGroup.getId()); + objectDao.excuteSQL(deleteSql); + for (OrgUnit orgUnit : orgUnitList) { + SterilizerGroupOrgunit sterilizerGroupOrgunit = new SterilizerGroupOrgunit(); + sterilizerGroupOrgunit.setOrgUnitId(orgUnit.getId()); + sterilizerGroupOrgunit.setSterilizerGroupId(sterilizerGroup.getId()); + objectDao.saveOrUpdate(sterilizerGroupOrgunit); + } + } + } + } + + @Override + public List getSterilizerGroupHttpOption(String orgUnitCode) { + + String sql = String.format("select po.optionText from %s po where po.optionListId = '%s'", HttpOption.class.getSimpleName(), HttpOption.SYSTEMSETTING_STERILIZER_GROUP); + if(StringUtils.isNotBlank(orgUnitCode)){ + sql += " and po.id in (select sterilizerGroupId from " + SterilizerGroupOrgunit.class.getSimpleName() + + " where orgUnitId in (select id from " + OrgUnit.class.getSimpleName() + " where orgUnitCoding = '" + orgUnitCode + "')) "; + } + sql += " ORDER BY po.sequence"; + + return objectDao.findByHql(sql); + } } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/sterilizer/SterilizerGroupOrgunit.java =================================================================== diff -u --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/sterilizer/SterilizerGroupOrgunit.java (revision 0) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/basedatamanager/sterilizer/SterilizerGroupOrgunit.java (revision 34520) @@ -0,0 +1,66 @@ +package com.forgon.disinfectsystem.entity.basedatamanager.sterilizer; + +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; + +/** + * 灭菌炉分组所属科室 + * @since 2022-08-05 + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +@Table(name = "SterilizerGroupOrgunit", indexes = {@Index(columnList = "sterilizerGroupId", name = "sgo_sgid_index") +,@Index(columnList = "orgUnitId", name = "sgo_orgid_index") +}) +@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE) +public class SterilizerGroupOrgunit { + + private Long id; + + /** + * 灭菌炉分组ID(HttpOption记录ID) + */ + private Long sterilizerGroupId; + + /** + * 科室ID + */ + private Long orgUnitId; + + @Id + @GeneratedValue(strategy = GenerationType.AUTO) + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getSterilizerGroupId() { + return sterilizerGroupId; + } + + public void setSterilizerGroupId(Long sterilizerGroupId) { + this.sterilizerGroupId = sterilizerGroupId; + } + + public Long getOrgUnitId() { + return orgUnitId; + } + + public void setOrgUnitId(Long orgUnitId) { + this.orgUnitId = orgUnitId; + } + +}