Index: ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml =================================================================== diff -u -r29868 -r29964 --- ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 29868) +++ ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 29964) @@ -2561,6 +2561,14 @@ + + + + + + + + Index: forgon-core/src/main/java/com/forgon/directory/model/OrgUnitGroup.java =================================================================== diff -u --- forgon-core/src/main/java/com/forgon/directory/model/OrgUnitGroup.java (revision 0) +++ forgon-core/src/main/java/com/forgon/directory/model/OrgUnitGroup.java (revision 29964) @@ -0,0 +1,68 @@ +package com.forgon.directory.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; +import javax.persistence.Transient; + +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +/** + * 科室分组设置 + * @author ZhouPeiMian + * + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +public class OrgUnitGroup { + + /** + * id + */ + private Long id; + + /** + * 科室分组设置名称 + */ + private String name; + + /** + * 分组内科室名称,实时查询,不持久化到数据库 + */ + private String orgUnitNames; + + @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; + } + + @Transient + public String getOrgUnitNames() { + return orgUnitNames; + } + + public void setOrgUnitNames(String orgUnitNames) { + this.orgUnitNames = orgUnitNames; + } + + /*public List getOrgUnitList(ObjectDao objectDao){ + + }*/ + +} Index: forgon-core/src/main/java/com/forgon/directory/service/OrgUnitGroupManagerImpl.java =================================================================== diff -u --- forgon-core/src/main/java/com/forgon/directory/service/OrgUnitGroupManagerImpl.java (revision 0) +++ forgon-core/src/main/java/com/forgon/directory/service/OrgUnitGroupManagerImpl.java (revision 29964) @@ -0,0 +1,141 @@ +package com.forgon.directory.service; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import com.forgon.directory.model.OrgUnit; +import com.forgon.directory.model.OrgUnitGroup; +import com.forgon.directory.model.Org_OrgGroup; +import com.forgon.exception.SystemException; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.BasePoManagerImpl; +import com.forgon.tools.string.StringTools; +import com.forgon.tools.util.SqlUtils; + +public class OrgUnitGroupManagerImpl extends BasePoManagerImpl implements OrgUnitGroupManager{ + + @Override + public JSONArray getOrgUnitGroupJSONArray() { + String hql = String.format("select g, o from %s g, %s o, %s r where g.id = r.orgGroupId and o.id = r.orgUnitId order by g.id desc ", + OrgUnitGroup.class.getSimpleName(), OrgUnit.class.getSimpleName(), Org_OrgGroup.class.getSimpleName()); + List list = objectDao.findByHql(hql); + if(CollectionUtils.isEmpty(list)){ + return new JSONArray(); + } + Map> orgGroupMap = new LinkedHashMap>(); + for(int i=0;i orgList = orgGroupMap.get(orgUnitGroup); + if(CollectionUtils.isEmpty(orgList)){ + orgList = new ArrayList(); + } + orgList.add(orgUnit); + orgGroupMap.put(orgUnitGroup, orgList); + } + JSONArray array = new JSONArray(); + if(!orgGroupMap.isEmpty()){ + for (OrgUnitGroup orgUnitGroup : orgGroupMap.keySet()) { + JSONObject group = new JSONObject(); + group.put("id", orgUnitGroup.getId()); + group.put("name", orgUnitGroup.getName()); + List orgUnitNameList = new ArrayList(); + List orgList = orgGroupMap.get(orgUnitGroup); + if(CollectionUtils.isNotEmpty(orgList)){ + for (OrgUnit orgUnit : orgList) { + orgUnitNameList.add(orgUnit.getName()); + } + } + group.put("orgUnitNames", StringTools.join(orgUnitNameList, ";")); + array.add(group); + } + } + return array; + } + + @Override + public JSONObject loadOrgUnitGroup(OrgUnitGroup orgUnitGroup) { + if(orgUnitGroup == null || !DatabaseUtil.isPoIdValid(orgUnitGroup.getId())){ + throw new SystemException("科室分组设置不存在!"); + } + String hql = String.format("select o from %s o, %s r where o.id = r.orgUnitId and r.orgGroupId = %s", + OrgUnit.class.getSimpleName(), Org_OrgGroup.class.getSimpleName(), orgUnitGroup.getId()); + List list = objectDao.findByHql(hql); + List orgUnitIdList = new ArrayList(); + List orgUnitCodeList = new ArrayList(); + List orgUnitNameList = new ArrayList(); + if(CollectionUtils.isNotEmpty(list)){ + for (Object object : list) { + OrgUnit ou = (OrgUnit) object; + orgUnitIdList.add(ou.getId()); + orgUnitCodeList.add(ou.getOrgUnitCoding()); + orgUnitNameList.add(ou.getName()); + } + } + JSONObject json = new JSONObject(); + json.put("id", orgUnitGroup.getId()); + json.put("name", orgUnitGroup.getName()); + json.put("orgUnitIds", StringTools.join(orgUnitIdList, ";")); + json.put("orgUnitCodes", StringTools.join(orgUnitCodeList, ";")); + json.put("orgUnitNames", StringTools.join(orgUnitNameList, ";")); + return json; + } + + @Override + public void batchDeleteOrgUnitGroupByIds(String ids) { + if(StringUtils.isBlank(ids)){ + throw new SystemException("科室分组设置id不存在!"); + } + Collection orgUnitGroupIdList = StringTools.parseToLongs(ids, ";"); + String deleteGroupSql = String.format("delete from %s where %s ", + OrgUnitGroup.class.getSimpleName(), SqlUtils.getNonStringFieldInLargeCollectionsPredicate("id", orgUnitGroupIdList)); + objectDao.excuteSQL(deleteGroupSql); + String deleteOrg_GroupSql = String.format("delete from %s where %s ", + Org_OrgGroup.class.getSimpleName(), SqlUtils.getNonStringFieldInLargeCollectionsPredicate("orgGroupId", orgUnitGroupIdList)); + objectDao.excuteSQL(deleteOrg_GroupSql); + } + + @Override + public void saveOrUpdateOrgUnitGroup(OrgUnitGroup orgUnitGroup, String departCodes) { + if(StringUtils.isBlank(orgUnitGroup.getName())){ + throw new SystemException("科室分组名称不能为空!"); + } + if(StringUtils.isBlank(departCodes)){ + throw new SystemException("科室不能为空!"); + } + this.save(orgUnitGroup); + if(StringUtils.isNotBlank(departCodes)){ + List departCodeList = (List) StringTools.toCollectionIgnoreNullAndBlank(departCodes, ";"); + String hql = String.format("select po from %s po where %s ", + OrgUnit.class.getSimpleName(), + SqlUtils.getStringFieldInLargeCollectionsPredicate("po.orgUnitCoding", departCodeList)); + List orgList = objectDao.findByHql(hql); + if(CollectionUtils.isEmpty(orgList)){ + throw new SystemException("科室不存在!"); + } + String deleteOrg_GroupSql = String.format("delete from %s where orgGroupId = %s ", + Org_OrgGroup.class.getSimpleName(), orgUnitGroup.getId()); + objectDao.excuteSQL(deleteOrg_GroupSql); + List org_GroupList = new ArrayList(); + for (OrgUnit orgUnit : orgList) { + Org_OrgGroup or = new Org_OrgGroup(); + or.setOrgGroupId(orgUnitGroup.getId()); + or.setOrgUnitId(orgUnit.getId()); + org_GroupList.add(or); + } + objectDao.batchSaveOrUpdate(org_GroupList); + } + } + +} Index: forgon-core/src/main/java/com/forgon/directory/action/OrgUnitGroupAction.java =================================================================== diff -u --- forgon-core/src/main/java/com/forgon/directory/action/OrgUnitGroupAction.java (revision 0) +++ forgon-core/src/main/java/com/forgon/directory/action/OrgUnitGroupAction.java (revision 29964) @@ -0,0 +1,116 @@ +package com.forgon.directory.action; + +import java.util.List; + +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 net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import com.forgon.directory.model.OrgUnitGroup; +import com.forgon.directory.service.OrgUnitGroupManager; +import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.StrutsResponseUtils; +import com.forgon.tools.db.DatabaseUtil; +import com.opensymphony.xwork2.ModelDriven; +import com.opensymphony.xwork2.Preparable; + +@ParentPackage(value = "default") +@Namespace(value = "/disinfectSystem") +@Action(value = "orgUnitGroupAction") +public class OrgUnitGroupAction implements ModelDriven, Preparable{ + + private OrgUnitGroup orgUnitGroup; + + private OrgUnitGroupManager orgUnitGroupManager; + + public void setOrgUnitGroupManager(OrgUnitGroupManager orgUnitGroupManager) { + this.orgUnitGroupManager = orgUnitGroupManager; + } + + /** + * 获取科室分组设置列表 + */ + public void findOrgUnitGroupList(){ + JSONArray array = orgUnitGroupManager.getOrgUnitGroupJSONArray(); + StrutsResponseUtils.output(true, array); + } + + /** + * 加载科室分组设置 + */ + public void loadOrgUnitGroup(){ + try { + JSONObject json = orgUnitGroupManager.loadOrgUnitGroup(orgUnitGroup); + StrutsResponseUtils.output(true, json); + } catch (Exception e) { + e.printStackTrace(); + StrutsResponseUtils.output(false, e.getMessage()); + } + } + + /** + * 科室分组设置下拉框列表 + */ + public void loadOrgUnitGroupList(){ + List orgUnitGroupList = orgUnitGroupManager.getAll(); + JSONArray data = new JSONArray(); + if(CollectionUtils.isNotEmpty(orgUnitGroupList)){ + for (OrgUnitGroup object : orgUnitGroupList) { + JSONObject json = new JSONObject(); + json.put("id", object.getId()); + json.put("name", object.getName()); + data.add(json); + } + } + StrutsResponseUtils.output(true, data); + } + + /** + * 根据id删除科室分组 + * @param ids 分组id(1;2;3) + */ + public void deleteOrgUnitGroupByIds(){ + try { + String ids = StrutsParamUtils.getPraramValue("ids", ""); + orgUnitGroupManager.batchDeleteOrgUnitGroupByIds(ids); + StrutsResponseUtils.output(true, "删除成功!"); + } catch (Exception e) { + e.printStackTrace(); + StrutsResponseUtils.output(false, e.getMessage()); + } + } + + /** + * 保存科室分组 + */ + public void saveOrUpdateOrgUnitGroup(){ + try { + String departCodes = StrutsParamUtils.getPraramValue("departCodes", ""); + orgUnitGroupManager.saveOrUpdateOrgUnitGroup(orgUnitGroup, departCodes); + StrutsResponseUtils.output(true, "保存成功!"); + } catch (Exception e) { + e.printStackTrace(); + StrutsResponseUtils.output(false, e.getMessage()); + } + } + + @Override + public void prepare() throws Exception { + String id = StrutsParamUtils.getPraramValue("id", ""); + if (DatabaseUtil.isPoIdValid(id)) { + orgUnitGroup = orgUnitGroupManager.get(id); + } else { + orgUnitGroup = new OrgUnitGroup(); + } + } + + @Override + public OrgUnitGroup getModel() { + return orgUnitGroup; + } + +} Index: forgon-core/src/main/java/com/forgon/directory/model/Org_OrgGroup.java =================================================================== diff -u --- forgon-core/src/main/java/com/forgon/directory/model/Org_OrgGroup.java (revision 0) +++ forgon-core/src/main/java/com/forgon/directory/model/Org_OrgGroup.java (revision 29964) @@ -0,0 +1,53 @@ +package com.forgon.directory.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.GenerationType; +import javax.persistence.Id; + +import org.hibernate.annotations.DynamicInsert; +import org.hibernate.annotations.DynamicUpdate; + +/** + * 科室和科室分组设置中间表 + * @author ZhouPeiMian + * + */ +@Entity +@DynamicInsert(false) +@DynamicUpdate(true) +public class Org_OrgGroup { + + @Id + @GeneratedValue(strategy=GenerationType.AUTO) + private Long id; + + private Long orgUnitId; + + private Long orgGroupId; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getOrgUnitId() { + return orgUnitId; + } + + public void setOrgUnitId(Long orgUnitId) { + this.orgUnitId = orgUnitId; + } + + public Long getOrgGroupId() { + return orgGroupId; + } + + public void setOrgGroupId(Long orgGroupId) { + this.orgGroupId = orgGroupId; + } + +} Index: forgon-core/src/main/java/com/forgon/directory/service/OrgUnitGroupManager.java =================================================================== diff -u --- forgon-core/src/main/java/com/forgon/directory/service/OrgUnitGroupManager.java (revision 0) +++ forgon-core/src/main/java/com/forgon/directory/service/OrgUnitGroupManager.java (revision 29964) @@ -0,0 +1,37 @@ +package com.forgon.directory.service; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import com.forgon.directory.model.OrgUnitGroup; +import com.forgon.tools.hibernate.BasePoManager; + +public interface OrgUnitGroupManager extends BasePoManager { + + /** + * 加载科室分组设置列表 + * @return + */ + public JSONArray getOrgUnitGroupJSONArray(); + + /** + * 加载科室分组设置 + * @param orgUnitGroup + * @return + */ + public JSONObject loadOrgUnitGroup(OrgUnitGroup orgUnitGroup); + + /** + * 批量删除 + * @param ids + */ + public void batchDeleteOrgUnitGroupByIds(String ids); + + /** + * 保存或者修改科室分组设置 + * @param orgUnitGroup + * @param departCodes + */ + public void saveOrUpdateOrgUnitGroup(OrgUnitGroup orgUnitGroup, String departCodes); + +}