Index: ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/model/OrgUnitChasControlTagVo.java =================================================================== diff -u --- ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/model/OrgUnitChasControlTagVo.java (revision 0) +++ ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/model/OrgUnitChasControlTagVo.java (revision 41594) @@ -0,0 +1,70 @@ +package com.forgon.disinfectsystem.datasynchronization.model; + +/** + * 科室CHAS“科室管控标识”的vo + * GDSZYY-269 + */ +public class OrgUnitChasControlTagVo { + + /** + * OES科室编码 + */ + private String oesDeptCode; + /** + * OES科室名称 + */ + private String oesDeptName; + /** + * chas科室编码 + */ + private String chasDeptCode; + /** + * chas科室名称 + */ + private String chasDeptName; + + public String getOesDeptCode() { + return oesDeptCode; + } + + public void setOesDeptCode(String oesDeptCode) { + if(oesDeptCode != null){ + this.oesDeptCode = oesDeptCode.trim(); + } + this.oesDeptCode = oesDeptCode; + } + + public String getOesDeptName() { + return oesDeptName; + } + + public void setOesDeptName(String oesDeptName) { + if(oesDeptName != null){ + this.oesDeptName = oesDeptName.trim(); + } + this.oesDeptName = oesDeptName; + } + + public String getChasDeptCode() { + return chasDeptCode; + } + + public void setChasDeptCode(String chasDeptCode) { + if(chasDeptCode != null){ + this.chasDeptCode = chasDeptCode.trim(); + } + this.chasDeptCode = chasDeptCode; + } + + public String getChasDeptName() { + return chasDeptName; + } + + public void setChasDeptName(String chasDeptName) { + if(chasDeptName != null){ + this.chasDeptName = chasDeptName.trim(); + } + this.chasDeptName = chasDeptName; + } + +} Index: ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/SyncOrgUnitChasControlTagDao.java =================================================================== diff -u --- ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/SyncOrgUnitChasControlTagDao.java (revision 0) +++ ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/SyncOrgUnitChasControlTagDao.java (revision 41594) @@ -0,0 +1,25 @@ +package com.forgon.disinfectsystem.datasynchronization.dao; + +import java.util.List; + +import com.forgon.disinfectsystem.datasynchronization.model.OrgUnitChasControlTagVo; + +/** + * 同步科室CHAS“科室管控标识”的dao + * GDSZYY-269 + */ +public interface SyncOrgUnitChasControlTagDao { + + /** + * 查询所有科室CHAS“科室管控标识” + * @return 科室CHAS“科室管控标识”的vo + */ + public List getAllOrgUnitChasControlTag(); + + /** + * 查询所有chas科室信息 + * @return 科室CHAS“科室管控标识”的vo + */ + public List getAllChasDept(); + +} Index: forgon-core/src/main/resources/com/forgon/directory/model/OrgUnit.hbm.xml =================================================================== diff -u -r39603 -r41594 --- forgon-core/src/main/resources/com/forgon/directory/model/OrgUnit.hbm.xml (.../OrgUnit.hbm.xml) (revision 39603) +++ forgon-core/src/main/resources/com/forgon/directory/model/OrgUnit.hbm.xml (.../OrgUnit.hbm.xml) (revision 41594) @@ -49,6 +49,11 @@ + + + + + 0){ + logStringBuilder.append(logMsg); + }else{ + logStringBuilder.append("修改信息:" + logMsg); + } + } + } + if(logStringBuilder.length() > 0){ + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_ORGUNIT, "U", logStringBuilder.toString()); + } } } Index: ssts-web/src/main/java/com/forgon/disinfectsystem/directory/service/ChasOrgUnitManager.java =================================================================== diff -u --- ssts-web/src/main/java/com/forgon/disinfectsystem/directory/service/ChasOrgUnitManager.java (revision 0) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/directory/service/ChasOrgUnitManager.java (revision 41594) @@ -0,0 +1,29 @@ +package com.forgon.disinfectsystem.directory.service; + +import java.util.List; + +import com.forgon.disinfectsystem.datasynchronization.model.OrgUnitChasControlTagVo; + +/** + * CHAS“科室管控标识”科室的manager + */ +public interface ChasOrgUnitManager { + + /** + * 查询CHAS“科室管控标识”的科室 + * @return 科室CHAS“科室管控标识”的vo + */ + public List getAllChasDept(); + + /** + * 同步科室的chas管控标识 + * @return 同步日志 + */ + public String syncOrgUnitChasControlTag(); + + /** + * 定时同步科室的chas管控标识 + */ + public void timingSyncOrgUnitChasControlTag(); + +} Index: ssts-web/src/main/webapp/disinfectsystem/config/gdszyy/spring/timer.xml =================================================================== diff -u -r41557 -r41594 --- ssts-web/src/main/webapp/disinfectsystem/config/gdszyy/spring/timer.xml (.../timer.xml) (revision 41557) +++ ssts-web/src/main/webapp/disinfectsystem/config/gdszyy/spring/timer.xml (.../timer.xml) (revision 41594) @@ -63,15 +63,37 @@ + + + + + + + timingSyncOrgUnitChasControlTag + + + + + + + + + + 0 0 0,12 * * ? + + + - + + + Index: ssts-web/src/main/webapp/disinfectsystem/config/gdszyy/spring/disposableGoodsChas.xml =================================================================== diff -u -r41557 -r41594 --- ssts-web/src/main/webapp/disinfectsystem/config/gdszyy/spring/disposableGoodsChas.xml (.../disposableGoodsChas.xml) (revision 41557) +++ ssts-web/src/main/webapp/disinfectsystem/config/gdszyy/spring/disposableGoodsChas.xml (.../disposableGoodsChas.xml) (revision 41594) @@ -10,35 +10,30 @@ http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd" default-autowire="byName" default-lazy-init="true"> - - - - - - - - - - - - - + - + + + + + + + + + + + + + \ No newline at end of file Index: ssts-web/src/main/java/com/forgon/disinfectsystem/directory/service/ChasOrgUnitManagerImpl.java =================================================================== diff -u --- ssts-web/src/main/java/com/forgon/disinfectsystem/directory/service/ChasOrgUnitManagerImpl.java (revision 0) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/directory/service/ChasOrgUnitManagerImpl.java (revision 41594) @@ -0,0 +1,120 @@ +package com.forgon.disinfectsystem.directory.service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.directory.model.OrgUnit; +import com.forgon.directory.service.OrgUnitManager; +import com.forgon.disinfectsystem.datasynchronization.dao.SyncOrgUnitChasControlTagDao; +import com.forgon.disinfectsystem.datasynchronization.model.OrgUnitChasControlTagVo; +import com.forgon.log.model.Log; +import com.forgon.log.service.LogManager; +import com.forgon.tools.Constants; +import com.forgon.tools.util.ConfigUtils; + +@Service("chasOrgUnitManager") +public class ChasOrgUnitManagerImpl implements ChasOrgUnitManager { + + private Logger logger = Logger.getLogger(this.getClass()); + + @Autowired(required=false) + private SyncOrgUnitChasControlTagDao syncOrgUnitChasControlTagDao; + + @Autowired + private OrgUnitManager orgUnitManager; + + @Autowired + private LogManager appLogManager; + + @Override + public List getAllChasDept() { + if(syncOrgUnitChasControlTagDao == null){ + throw new RuntimeException("syncOrgUnitChasControlTagDao == null"); + } + return syncOrgUnitChasControlTagDao.getAllChasDept(); + } + + @Transactional + @Override + public String syncOrgUnitChasControlTag() { + boolean enableChasSystemTagPush = ConfigUtils.getSystemSetConfigByNameBool("enableChasSystemTagPush"); + if(!enableChasSystemTagPush){ + throw new RuntimeException("未开启enableChasSystemTagPush配置项"); + } + if(syncOrgUnitChasControlTagDao == null){ + throw new RuntimeException("syncOrgUnitChasControlTagDao == null"); + } + List orgUnitChasControlTagVoList = syncOrgUnitChasControlTagDao.getAllOrgUnitChasControlTag(); + if(CollectionUtils.isEmpty(orgUnitChasControlTagVoList)){ + throw new RuntimeException("视图查询返回结果为空,没有需要同步的数据!"); + } + List allOrgUnit = orgUnitManager.getAll(); + if(CollectionUtils.isEmpty(allOrgUnit)){ + throw new RuntimeException("组织机构为空,没有需要同步的数据!"); + } + Map orgUnitCodeOrgUnitChasControlTagVoMap = new HashMap(); + for (OrgUnitChasControlTagVo orgUnitChasControlTagVo : orgUnitChasControlTagVoList) { + orgUnitCodeOrgUnitChasControlTagVoMap.put(orgUnitChasControlTagVo.getOesDeptCode(), orgUnitChasControlTagVo); + } + + int updateAmount = 0; + StringBuffer updateLogBuffer = new StringBuffer(); + for (OrgUnit orgUnit : allOrgUnit) { + OrgUnitChasControlTagVo orgUnitChasControlTagVo = orgUnitCodeOrgUnitChasControlTagVoMap.get(orgUnit.getOrgUnitCoding()); + if(orgUnitChasControlTagVo == null){ + //如果追溯系统中某个科室的“CHAS 管控标识”为“是”,但在本次从 OES 获取的管控列表中已不存在,则不变更相应的科室的信息。 + continue; + } + String oldChasControlTag = orgUnit.getChasControlTag(); + String oldChasDeptCode = orgUnit.getChasDeptCode(); + String oldChasDeptName = orgUnit.getChasDeptName(); + if(!StringUtils.equals(oldChasControlTag, Constants.STR_YES) + || !StringUtils.equals(oldChasDeptCode, orgUnitChasControlTagVo.getChasDeptCode()) + || !StringUtils.equals(oldChasDeptName, orgUnitChasControlTagVo.getChasDeptName())){ + orgUnit.setChasControlTag(Constants.STR_YES); + orgUnit.setChasDeptCode(orgUnitChasControlTagVo.getChasDeptCode()); + orgUnit.setChasDeptName(orgUnitChasControlTagVo.getChasDeptName()); + orgUnitManager.update(orgUnit); + updateAmount++; + String logMsg = String.format("id=%s,科室编码=%s," + + "修改前:CHAS管控标识为“%s”,CHAS管控科室编码为“%s”,CHAS管控科室名称为“%s”;" + + "修改后:CHAS管控标识为“%s”,CHAS管控科室编码为“%s”,CHAS管控科室名称为“%s”;", + orgUnit.getId(), orgUnit.getOrgUnitCoding(), + oldChasControlTag, oldChasDeptCode, oldChasDeptName, + orgUnit.getChasControlTag(), orgUnit.getChasDeptCode(), orgUnit.getChasDeptName()); + updateLogBuffer.append(logMsg); + } + } + StringBuffer logBuffer = new StringBuffer(String.format("修改数量%s。", updateAmount)); + if(updateLogBuffer.length() > 0){ + logBuffer.append("组织机构修改明细:"); + logBuffer.append(updateLogBuffer); + } + + return logBuffer.toString(); + } + + @Override + public void timingSyncOrgUnitChasControlTag() { + try { + logger.debug("开始定时同步组织机构CHAS管控标识"); + String logMsg = this.syncOrgUnitChasControlTag(); + logger.debug("完成定时同步组织机构CHAS管控标识"); + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_ORGUNIT, Log.LOGGER_TYPE_UPDATE, "定时器同步组织机构CHAS标识:" + logMsg); + } catch (Exception e) { + e.printStackTrace(); + logger.debug("定时同步组织机构CHAS管控标识出现异常:" + e.getMessage()); + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_ORGUNIT, Log.LOGGER_TYPE_UPDATE, "定时器同步组织机构CHAS标识失败:" + e.getMessage()); + } + } + +} Index: forgon-core/src/main/java/com/forgon/directory/action/OrgUnitAction.java =================================================================== diff -u -r40302 -r41594 --- forgon-core/src/main/java/com/forgon/directory/action/OrgUnitAction.java (.../OrgUnitAction.java) (revision 40302) +++ forgon-core/src/main/java/com/forgon/directory/action/OrgUnitAction.java (.../OrgUnitAction.java) (revision 41594) @@ -399,6 +399,9 @@ OrgUnit.class.getSimpleName(), Long.valueOf(id)); orgUnit.setParentId(orgUnit.getParent().getId()); orgUnit.setOldName(orgUnit.getName()); + orgUnit.setOldChasControlTag(orgUnit.getChasControlTag()); + orgUnit.setOldChasDeptCode(orgUnit.getChasDeptCode()); + orgUnit.setOldChasDeptName(orgUnit.getChasDeptName()); } else { orgUnit = new OrgUnit(); if (StringUtils.isNotBlank(parentId)) { Index: ssts-web/src/main/webapp/disinfectsystem/config/gdszyy/spring/HIS.xml =================================================================== diff -u -r30628 -r41594 --- ssts-web/src/main/webapp/disinfectsystem/config/gdszyy/spring/HIS.xml (.../HIS.xml) (revision 30628) +++ ssts-web/src/main/webapp/disinfectsystem/config/gdszyy/spring/HIS.xml (.../HIS.xml) (revision 41594) @@ -93,6 +93,15 @@ + + + + + + + + + + + + + \ No newline at end of file Index: ssts-web/src/main/java/com/forgon/disinfectsystem/directory/controller/ChasOrgUnitController.java =================================================================== diff -u --- ssts-web/src/main/java/com/forgon/disinfectsystem/directory/controller/ChasOrgUnitController.java (revision 0) +++ ssts-web/src/main/java/com/forgon/disinfectsystem/directory/controller/ChasOrgUnitController.java (revision 41594) @@ -0,0 +1,73 @@ +package com.forgon.disinfectsystem.directory.controller; + +import java.util.List; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import org.apache.commons.collections.CollectionUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.disinfectsystem.datasynchronization.model.OrgUnitChasControlTagVo; +import com.forgon.disinfectsystem.directory.service.ChasOrgUnitManager; +import com.forgon.log.model.Log; +import com.forgon.log.service.LogManager; +import com.forgon.tools.json.JSONUtil; + +/** + * CHAS“科室管控标识”科室的controller + * GDSZYY-269 + */ +@RestController +@RequestMapping(value = "/disinfectSystem/web/chasOrgUnitController", produces = "application/json;charset=UTF-8") +public class ChasOrgUnitController { + + @Autowired + private ChasOrgUnitManager chasOrgUnitManager; + + @Autowired + private LogManager appLogManager; + + /** + * 查询CHAS“科室管控标识”科室 + * @return CHAS“科室管控标识”科室 + */ + @RequestMapping(value = "/getAllChasDept") + public String getAllChasDept(){ + JSONObject result = JSONUtil.buildJsonObject(true); + try { + List voList = chasOrgUnitManager.getAllChasDept(); + JSONArray data = new JSONArray(); + if(CollectionUtils.isNotEmpty(voList)){ + data = JSONArray.fromObject(voList); + } + result = JSONUtil.buildJsonObject(true, data); + } catch (Exception e) { + e.printStackTrace(); + result = JSONUtil.buildJsonObject(false, e.getMessage()); + } + return result.toString(); + } + + /** + * 同步科室的chas管控标识 + * @return 同步结果 + */ + @RequestMapping(value = "/syncOrgUnitChasControlTag") + public String syncOrgUnitChasControlTag(){ + JSONObject result = JSONUtil.buildJsonObject(true, "同步成功"); + try { + String logMsg = chasOrgUnitManager.syncOrgUnitChasControlTag(); + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_ORGUNIT, Log.LOGGER_TYPE_UPDATE, "手工同步组织机构CHAS标识:" + logMsg); + } catch (Exception e) { + e.printStackTrace(); + appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_ORGUNIT, Log.LOGGER_TYPE_UPDATE, "手工同步组织机构CHAS标识失败:" + e.getMessage()); + result = JSONUtil.buildJsonObject(false, e.getMessage()); + } + return result.toString(); + } + +}