Index: ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml
===================================================================
diff -u -r37397 -r37454
--- ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 37397)
+++ ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 37454)
@@ -2998,4 +2998,15 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
Index: ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/dwr/table/WashAndDisinfectRecordTableManager.java
===================================================================
diff -u -r36990 -r37454
--- ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/dwr/table/WashAndDisinfectRecordTableManager.java (.../WashAndDisinfectRecordTableManager.java) (revision 36990)
+++ ssts-wash/src/main/java/com/forgon/disinfectsystem/washanddisinfectmanager/washanddisinfectrecord/dwr/table/WashAndDisinfectRecordTableManager.java (.../WashAndDisinfectRecordTableManager.java) (revision 37454)
@@ -12,6 +12,7 @@
import org.json.JSONArray;
import org.json.JSONObject;
+import com.forgon.Constants;
import com.forgon.component.grid.GridManager;
import com.forgon.databaseadapter.service.DateQueryAdapter;
import com.forgon.directory.acegi.tools.AcegiHelper;
@@ -24,10 +25,13 @@
import com.forgon.disinfectsystem.entity.basedatamanager.cleanmethod.CleanMethod;
import com.forgon.disinfectsystem.entity.basedatamanager.cleanmethod.CleanMethodConsumptionVolume;
import com.forgon.disinfectsystem.entity.basedatamanager.rinser.Rinser;
+import com.forgon.disinfectsystem.entity.basedatamanager.rinser.RinserGroup;
import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition;
import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectRecord;
import com.forgon.disinfectsystem.washanddisinfectmanager.washanddisinfectrecord.service.WashAndDisinfectRecordManager;
+import com.forgon.tools.db.DatabaseUtil;
import com.forgon.tools.string.StringTools;
+import com.forgon.tools.util.ConfigUtils;
/**
* @author WangYi 2012-2-24
@@ -147,6 +151,21 @@
WashAndDisinfectRecord.class.getSimpleName(),
tousseNameSql);
}
+
+ //增加“清洗机分组定义”功能ZJYY-135
+ boolean enableRinserGroupFunction = ConfigUtils.getSystemSetConfigByNameBool("enableRinserGroupFunction");
+ if(enableRinserGroupFunction){
+ String rinserGroupId = sqlWhereParamMap.get("rinserGroupId");
+ if(DatabaseUtil.isPoIdValid(rinserGroupId)){
+ sql += String.format(" and (po.rinserId in (select id from %s where rinserGroupId = %s) or exists (select 1 from %s where id = %s and belongToAllOrgUnit = '%s'))",
+ Rinser.class.getSimpleName(),
+ rinserGroupId,
+ RinserGroup.class.getSimpleName(),
+ rinserGroupId,
+ Constants.STR_YES);
+ }
+ }
+
String result = gridManager.renderGrid(parameterMap, WashAndDisinfectRecord.class
.getSimpleName(), sql, new String[] {"classifyBaskets","washAndDisinfectMaterials","washAndDisinfectPictures"});
return resultBackHandler(result);
Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/rinsergroup/service/RinserGroupManagerImpl.java
===================================================================
diff -u
--- ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/rinsergroup/service/RinserGroupManagerImpl.java (revision 0)
+++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/basedatamanager/rinsergroup/service/RinserGroupManagerImpl.java (revision 37454)
@@ -0,0 +1,321 @@
+package com.forgon.disinfectsystem.basedatamanager.rinsergroup.service;
+
+import java.sql.ResultSet;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.collections4.map.HashedMap;
+import org.apache.commons.lang.StringUtils;
+
+import com.forgon.Constants;
+import com.forgon.directory.model.OrgUnit;
+import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager;
+import com.forgon.disinfectsystem.entity.basedatamanager.rinser.Rinser;
+import com.forgon.disinfectsystem.entity.basedatamanager.rinser.RinserGroup;
+import com.forgon.disinfectsystem.entity.basedatamanager.rinser.RinserGroupOrgUnit;
+import com.forgon.tools.db.DatabaseUtil;
+import com.forgon.tools.hibernate.BasePoManagerImpl;
+import com.forgon.tools.string.StringTools;
+import com.forgon.tools.util.SqlUtils;
+
+/**
+ * 清洗机分组ZJYY-135
+ */
+public class RinserGroupManagerImpl extends BasePoManagerImpl implements RinserGroupManager{
+
+ private SupplyRoomConfigManager supplyRoomConfigManager;
+
+ public void setSupplyRoomConfigManager(SupplyRoomConfigManager supplyRoomConfigManager) {
+ this.supplyRoomConfigManager = supplyRoomConfigManager;
+ }
+
+ @Override
+ public void saveOrUpdateRinserGroup(RinserGroup rinserGroup, RinserGroup originalRinserGroup) {
+ //名称不能为空
+ if(StringUtils.isBlank(rinserGroup.getName())){
+ throw new RuntimeException("分组名称不能为空!");
+ }
+ //名称不能重复
+ String nameSql = String.format("select count(1) from %s po where po.name = '%s' ",
+ RinserGroup.class.getSimpleName(),
+ rinserGroup.getName());
+ if(DatabaseUtil.isPoIdValid(rinserGroup.getId())){
+ nameSql += " and po.id <> " + rinserGroup.getId();
+ }
+ if(objectDao.countBySql(nameSql) > 0){
+ throw new RuntimeException("分组名称不能重复!");
+ }
+
+ //设置顺序号
+ if(!DatabaseUtil.isPoIdValid(rinserGroup.getId())){
+ Long maxSequence = getMaxSequence();
+ rinserGroup.setSequence(maxSequence+1);
+ }
+ if(rinserGroup.getSequence() == null){
+ throw new RuntimeException("分组顺序无效!");
+ }
+
+ objectDao.saveOrUpdate(rinserGroup);
+ //保存或者修改所属科室
+ saveOrUpdateRinserGroupOrgUnit(rinserGroup, originalRinserGroup);
+
+ }
+
+ /**
+ * 查询最大顺序号
+ * @return
+ */
+ private Long getMaxSequence() {
+ Long max = null;
+ String sql = " select max(po.sequence) seq from RinserGroup po ";
+ ResultSet rs = objectDao.executeSql(sql);
+ try {
+ while(rs.next()){
+ max = rs.getLong("seq");
+ }
+ } catch (SQLException e) {
+ e.printStackTrace();
+ }finally {
+ DatabaseUtil.closeResultSetAndStatement(rs);
+ }
+ if(max == null){
+ max = 0l;
+ }
+ return max ;
+ }
+
+ /**
+ * 保存或者修改所属科室
+ * @param rinserGroup
+ * @param originalRinserGroup
+ */
+ private void saveOrUpdateRinserGroupOrgUnit(RinserGroup rinserGroup, RinserGroup originalRinserGroup) {
+ if(rinserGroup == null || !DatabaseUtil.isPoIdValid(rinserGroup.getId())){
+ return;
+ }
+
+ //删除旧的所属科室
+ if(DatabaseUtil.isPoIdValid(rinserGroup.getId())){
+ String deleteSql = String.format("delete from %s where rinserGroupId = %s",
+ RinserGroupOrgUnit.class.getSimpleName(),
+ rinserGroup.getId());
+ objectDao.excuteSQL(deleteSql);
+ }
+
+ //属于所有供应室
+ if(StringUtils.equals(rinserGroup.getBelongToAllOrgUnit(), Constants.STR_YES)){
+ return;
+ }
+
+ //所属科室不能为空
+ if(StringUtils.isBlank(rinserGroup.getBelogToOrgUnitIds())){
+ throw new RuntimeException("所属科室不能为空!");
+ }
+
+ //所属科室必须是一二级供应室
+ Map supplyRoomOrgUnitIDMap = new HashedMap();
+ List supplyRoomOrgUnitList = supplyRoomConfigManager.getSupplyRoomOrgUnitList();
+ if(CollectionUtils.isNotEmpty(supplyRoomOrgUnitList)){
+ for (OrgUnit orgUnit : supplyRoomOrgUnitList) {
+ supplyRoomOrgUnitIDMap.put(orgUnit.getId(), orgUnit);
+ }
+ }
+
+ String belogToOrgUnitIds = rinserGroup.getBelogToOrgUnitIds();
+ Collection belogToOrgUnitIdColl = StringTools.parseToLongs(belogToOrgUnitIds, ",");
+ if(CollectionUtils.isEmpty(belogToOrgUnitIdColl)){
+ throw new RuntimeException("所属科室不能为空!");
+ }
+
+ // 已经绑定了某个所属科室的清洗机,则不能再删除该所属科室
+ if(DatabaseUtil.isPoIdValid(rinserGroup.getId()) && originalRinserGroup != null){
+ String originalBelogToOrgUnitIds = originalRinserGroup.getBelogToOrgUnitIds();
+ if(StringUtils.isNotBlank(originalBelogToOrgUnitIds)){
+ Collection originalBelogToOrgUnitIdColl = StringTools.parseToLongs(originalBelogToOrgUnitIds, ",");
+ if(CollectionUtils.isNotEmpty(originalBelogToOrgUnitIdColl)){
+ //被移除的所属科室ID
+ List removeBelogToOrgUnitIdList = new ArrayList();
+ for (Long belogToOrgUnitId : originalBelogToOrgUnitIdColl) {
+ if(!belogToOrgUnitIdColl.contains(belogToOrgUnitId)){
+ removeBelogToOrgUnitIdList.add(belogToOrgUnitId);
+ }
+ }
+ if(CollectionUtils.isNotEmpty(removeBelogToOrgUnitIdList)){
+ //清洗机所属科室关联科室编码
+ String sql = String.format("select count(*) from %s r where r.rinserGroupId = %s and r.orgUnitCoding in(select orgUnitCoding from %s where %s)",
+ Rinser.class.getSimpleName(),
+ rinserGroup.getId(),
+ OrgUnit.class.getSimpleName(),
+ SqlUtils.getStringFieldInLargeCollectionsPredicate("id", removeBelogToOrgUnitIdList));
+ if(objectDao.countBySql(sql) > 0){
+ throw new RuntimeException("已经绑定清洗机,不能删除所属科室!");
+ }
+ }
+ }
+ }
+ }
+ for (Long belogToOrgUnitId : belogToOrgUnitIdColl) {
+ if(!supplyRoomOrgUnitIDMap.containsKey(belogToOrgUnitId)){
+ throw new RuntimeException("所属科室无效!");
+ }
+ RinserGroupOrgUnit rgo = new RinserGroupOrgUnit();
+ rgo.setOrgUnitId(belogToOrgUnitId);
+ rgo.setRinserGroupId(rinserGroup.getId());
+ objectDao.save(rgo);
+ }
+
+ }
+
+ @Override
+ public void batchDeleteRinserGroup(String ids) {
+ if(StringUtils.isBlank(ids)){
+ return;
+ }
+ List rinserGroupList = this.getCollection(ids, ",");
+ if(CollectionUtils.isNotEmpty(rinserGroupList)){
+ String sql = String.format("select count(*) from %s r where r.rinserGroupId in (%s)",
+ Rinser.class.getSimpleName(),
+ ids);
+ if(objectDao.countBySql(sql) > 0){
+ throw new RuntimeException("已经绑定清洗机,不能删除!");
+ }
+ for (RinserGroup rinserGroup : rinserGroupList) {
+ objectDao.delete(rinserGroup);
+ String deleteSql = String.format("delete from %s where rinserGroupId = %s",
+ RinserGroupOrgUnit.class.getSimpleName(),
+ rinserGroup.getId());
+ objectDao.excuteSQL(deleteSql);
+ }
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ @Override
+ public Map> loadRinserGroupBelogToOrgUnit(Collection rinserGroupIds) {
+ Map> belongToOrgUnitMap = new HashedMap>();
+ if(CollectionUtils.isEmpty(rinserGroupIds)){
+ return belongToOrgUnitMap;
+ }
+ List groupList = this.getCollection(rinserGroupIds);
+ if(CollectionUtils.isEmpty(groupList)){
+ return belongToOrgUnitMap;
+ }
+ String hql = String.format("select rgo, po from %s po, %s rgo where %s and po.id = rgo.orgUnitId ",
+ OrgUnit.class.getSimpleName(),
+ RinserGroupOrgUnit.class.getSimpleName(),
+ SqlUtils.getNonStringFieldInLargeCollectionsPredicate("rgo.rinserGroupId", rinserGroupIds));
+ List