Index: ssts-web/src/main/webapp/disinfectsystem/config/szsdsrmyy/spring/timer.xml =================================================================== diff -u -r30504 -r36024 --- ssts-web/src/main/webapp/disinfectsystem/config/szsdsrmyy/spring/timer.xml (.../timer.xml) (revision 30504) +++ ssts-web/src/main/webapp/disinfectsystem/config/szsdsrmyy/spring/timer.xml (.../timer.xml) (revision 36024) @@ -46,12 +46,36 @@ + + + + + + + timingReviewAndConvertUseRecordByPatientSurgicalStatusView + + + + + + + + + + + 0 0/5 * * * ? + + + + + Index: ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/model/PatientInfoVO.java =================================================================== diff -u -r34408 -r36024 --- ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/model/PatientInfoVO.java (.../PatientInfoVO.java) (revision 34408) +++ ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/model/PatientInfoVO.java (.../PatientInfoVO.java) (revision 36024) @@ -117,6 +117,11 @@ * 手术部位(外来器械申请单“手术部位”字段BLXRMYY-34) */ private String operationPart; + + /** + * 手术状态SZSDSRMYY-111 + */ + private String operationStatus; public static final String TYPE_HOSPITAL = "住院号"; public static final String TYPE_CLINIC = "诊疗号"; @@ -452,5 +457,15 @@ public void setOperationPart(String operationPart) { this.operationPart = operationPart; } + + public String getOperationStatus() { + return operationStatus; + } + + + public void setOperationStatus(String operationStatus) { + this.operationStatus = operationStatus; + } + } Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManager.java =================================================================== diff -u -r35854 -r36024 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManager.java (.../UseRecordManager.java) (revision 35854) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManager.java (.../UseRecordManager.java) (revision 36024) @@ -443,4 +443,9 @@ * @return */ public List loadLoginUserCanSeeUseRecordDepart(String spell); + + /** + * 定时读取病人状态视图,并根据手术状态自动审核使用记录SZSDSRMYY-111 + */ + public void timingReviewAndConvertUseRecordByPatientSurgicalStatusView(); } Index: ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/FindPatientSurgicalStatusByHospitalNumberDao.java =================================================================== diff -u --- ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/FindPatientSurgicalStatusByHospitalNumberDao.java (revision 0) +++ ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/FindPatientSurgicalStatusByHospitalNumberDao.java (revision 36024) @@ -0,0 +1,23 @@ +package com.forgon.disinfectsystem.datasynchronization.dao; + +import java.util.List; + +import org.apache.ibatis.annotations.Param; + +import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; + +/** + * 查询手术病人状态的dao(SZSDSRMYY-111) + */ +public interface FindPatientSurgicalStatusByHospitalNumberDao { + + /** + * 感觉手术状态获取患者信息 + * @param operationStatus 手术状态(目前只查手术状态为【患者离室】的患者该信息) + * @param startDate 开始时间 + * @param endDate 结束时间 + * @return + */ + public List findPatientSurgicalStatusByHospitalNumber(@Param("hospitalNumber") String hospitalNumber); + +} Index: ssts-web/src/main/webapp/disinfectsystem/config/szsdsrmyy/spring/HIS.xml =================================================================== diff -u -r29942 -r36024 --- ssts-web/src/main/webapp/disinfectsystem/config/szsdsrmyy/spring/HIS.xml (.../HIS.xml) (revision 29942) +++ ssts-web/src/main/webapp/disinfectsystem/config/szsdsrmyy/spring/HIS.xml (.../HIS.xml) (revision 36024) @@ -154,4 +154,27 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java =================================================================== diff -u -r35854 -r36024 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 35854) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 36024) @@ -74,6 +74,7 @@ import com.forgon.disinfectsystem.basedatamanager.warehouse.service.StorageRecordManager; import com.forgon.disinfectsystem.basedatamanager.warehouse.service.WareHouseManager; import com.forgon.disinfectsystem.common.CssdUtils; +import com.forgon.disinfectsystem.datasynchronization.dao.FindPatientSurgicalStatusByHospitalNumberDao; import com.forgon.disinfectsystem.datasynchronization.dao.UseRecordPushDao; import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; import com.forgon.disinfectsystem.datasynchronization.service.DataSynchronizationManager; @@ -234,7 +235,14 @@ private OperationManager operationManager; private OrgUnitManager orgUnitManager; + + private FindPatientSurgicalStatusByHospitalNumberDao findPatientSurgicalStatusByHospitalNumberDao; + public void setFindPatientSurgicalStatusByHospitalNumberDao( + FindPatientSurgicalStatusByHospitalNumberDao findPatientSurgicalStatusByHospitalNumberDao) { + this.findPatientSurgicalStatusByHospitalNumberDao = findPatientSurgicalStatusByHospitalNumberDao; + } + public void setOrgUnitManager(OrgUnitManager orgUnitManager) { this.orgUnitManager = orgUnitManager; } @@ -11989,4 +11997,111 @@ return objectDao.findByHql(hql); } + + @Override + public void timingReviewAndConvertUseRecordByPatientSurgicalStatusView(){ + try { + timingReviewAndConvertUseRecordByPatientSurgicalStatusView_internal(); + } catch (Exception e) { + e.printStackTrace(); + logger.debug("定时审核使用记录并转换申请单报错:" + e.getMessage()); + } + } + + /** + * 定时审核使用记录并转换申请单 + */ + @SuppressWarnings("unchecked") + private void timingReviewAndConvertUseRecordByPatientSurgicalStatusView_internal() { + logger.debug("定时审核使用记录并转换申请单"); + if(findPatientSurgicalStatusByHospitalNumberDao == null){ + logger.debug("未找到findPatientSurgicalStatusByHospitalNumberDao"); + return; + } + //查询状态为待审核并且住院号不为空的使用记录 + String sql = " where status = '"+ UseRecord.STATUS_UNAUDITED +"' and hospitalNum is not null "; + List unAuditedUseRecordList = + objectDao.findBySql_ForUpdate(UseRecord.class.getSimpleName(), sql); + if(CollectionUtils.isEmpty(unAuditedUseRecordList)){ + logger.debug("没有待审核使用记录需要处理"); + return; + } + List ids = new ArrayList(); + List auditedUseRecordList = new ArrayList(); + for (UseRecord useRecord : unAuditedUseRecordList) { + + String hospitalNumber = useRecord.getHospitalNum(); + if(StringUtils.isBlank(hospitalNumber)){ + logger.debug("住院号为空的使用记录不需要处理"); + continue; + } + List patientInfoVOList = findPatientSurgicalStatusByHospitalNumberDao.findPatientSurgicalStatusByHospitalNumber(hospitalNumber); + if(CollectionUtils.isEmpty(patientInfoVOList)){ + logger.debug("手术病人状态视图没有住院号为【" + hospitalNumber + "】的数据"); + continue; + } + //同一个住院号多个记录时,只找手术时间最近的记录 + PatientInfoVO patientInfoVO = patientInfoVOList.get(0); + logger.debug("住院号为【" + hospitalNumber + "】的手术病人状态为【" + patientInfoVO.getOperationStatus() + "】"); + if(!StringUtils.equals(patientInfoVO.getOperationStatus(), "患者离室")){ + continue; + } + //判断使用记录的物品是否为空 + String validate = ""; + try { + useRecord.validateUseRecordItemsWhenReviewing(objectDao); + } catch (Exception e) { + e.printStackTrace(); + validate = e.getMessage(); + } + if(StringUtils.isNotBlank(validate)){ + logger.debug(validate); + continue; + } + ids.add(useRecord.getId()); + auditedUseRecordList.add(useRecord); + } + if(CollectionUtils.isEmpty(ids)){ + logger.debug("没有手术状态为【患者离室】待审核使用记录需要处理"); + return; + } + multiAuditedUseRecordsMergeConvertRecyclingApplication(ids, "定时"); + //改审核人为登记人 + List operatorList = new ArrayList(); + if(CollectionUtils.isNotEmpty(auditedUseRecordList)){ + for (UseRecord useRecord : auditedUseRecordList) { + String operator = useRecord.getOperator(); + if(StringUtils.isNotBlank(operator) + && !operatorList.contains(operator)){ + operatorList.add(operator); + } + } + Map userMap = new HashMap(); + List userList = objectDao.getCollection(User.class.getSimpleName(), "fullName", operatorList); + if(CollectionUtils.isNotEmpty(userList)){ + for (User user : userList) { + userMap.put(user.getFullName(), user); + } + } + StringBuffer updateSql = new StringBuffer(); + for (UseRecord useRecord : auditedUseRecordList) { + String operator = useRecord.getOperator(); + if(StringUtils.isBlank(operator)){ + continue; + } + User user = userMap.get(operator); + if(user == null){ + continue; + } + //审核操作人 + String tempUpdateSql = String.format("update %s set reviewer = '%s', reviewerCode = '%s' where id = %s ;", + UseRecord.class.getSimpleName(), + StringTools.defaultString(user.getFullName()), + StringTools.defaultString(user.getName()), + useRecord.getId()); + updateSql.append(tempUpdateSql); + } + objectDao.excuteSQL(updateSql.toString()); + } + } } Index: ssts-web/src/main/webapp/disinfectsystem/config/szsdsrmyy/interfaces/mybatis/FindPatientSurgicalStatusByHospitalNumberMapper.xml =================================================================== diff -u --- ssts-web/src/main/webapp/disinfectsystem/config/szsdsrmyy/interfaces/mybatis/FindPatientSurgicalStatusByHospitalNumberMapper.xml (revision 0) +++ ssts-web/src/main/webapp/disinfectsystem/config/szsdsrmyy/interfaces/mybatis/FindPatientSurgicalStatusByHospitalNumberMapper.xml (revision 36024) @@ -0,0 +1,21 @@ + + + + + + + + \ No newline at end of file