Index: ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslgzxyy/TousseInstancePushDaoImpl.java =================================================================== diff -u -r39411 -r41196 --- ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslgzxyy/TousseInstancePushDaoImpl.java (.../TousseInstancePushDaoImpl.java) (revision 39411) +++ ssts-datasync-default-impl/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/szslgzxyy/TousseInstancePushDaoImpl.java (.../TousseInstancePushDaoImpl.java) (revision 41196) @@ -13,7 +13,6 @@ import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.transaction.PlatformTransactionManager; import com.forgon.directory.model.OrgUnit; import com.forgon.directory.model.OrgUserRelation; @@ -24,9 +23,11 @@ import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.becleanitem.ClassifyBasket; import com.forgon.disinfectsystem.entity.invoicemanager.Invoice; +import com.forgon.disinfectsystem.entity.invoicemanager.InvoicePlan; import com.forgon.disinfectsystem.entity.packing.PackingRecord; import com.forgon.disinfectsystem.entity.recyclingrecord.RecyclingRecord; import com.forgon.disinfectsystem.entity.sterilizationmanager.sterilizationrecord.SterilizationRecord; +import com.forgon.disinfectsystem.entity.useRecord.UseRecord; import com.forgon.disinfectsystem.entity.washanddisinfectmanager.washanddisinfectrecord.WashAndDisinfectRecord; import com.forgon.security.model.User; import com.forgon.tools.db.DatabaseUtil; @@ -50,11 +51,77 @@ @Autowired private OrgUnitManager orgUnitManager; - @Autowired - private PlatformTransactionManager transactionManager; + /** + * 科室申领 + */ + public final static String POINT_CODE_DEPT_REQ = "disinsupply_dept_req"; + /** + * 回收清点 + */ + public final static String POINT_CODE_RECYCLE = "disinsupply_retrieve"; + /** + * 清洗消毒 + */ + public final static String POINT_CODE_CLEAN = "disinsupply_clean"; + /** + * 已装配 + */ + public final static String POINT_CODE_PACKING = "disinsupply_packing"; + /** + * 已审核 + */ + public final static String POINT_CODE_PROCESS = "disinsupply_process"; + /** + * 灭菌中 + */ + public final static String POINT_CODE_DISINFECT_DOING = "disinsupply_disinfect_doing"; + /** + * 已灭菌 + */ + public final static String POINT_CODE_DISINFECT_DONE = "disinsupply_disinfect_done"; + /** + * 生物监测 + */ + public final static String POINT_CODE_DISINFECT_BIO_MONITOR = "disinsupply_biomonitoring"; + /** + * 物理监测 + */ + public final static String POINT_CODE_DISINFECT_PHYSICAL_MONITOR = "disinsupply_physicalmonitoring"; + /** + * 化学监测 + */ + public final static String POINT_CODE_DISINFECT_CHEMICAL_MONITOR = "disinsupply_chemicalmonitoring"; + /** + * 已发货 + */ + public final static String POINT_CODE_GRANT = "disinsupply_grant"; + /** + * 复核/装载 + */ + public final static String POINT_CODE_VALID = "disinsupply_valid"; + /** + * 灭菌开始 + */ + public final static String POINT_CODE_STE_BEGIN = "disinsupply_begin"; + /** + * 灭菌结束 + */ + public final static String POINT_CODE_STE_END = "disinsupply_end"; + /** + * 效果监测 + */ + public final static String POINT_CODE_CHECK = "disinsupply_check"; + /** + * 已签收 + */ + public final static String POINT_CODE_GET = "disinsupply_get"; + /** + * 已使用 + */ + public final static String POINT_CODE_USED = "disinsupply_used"; /** - * 每个器械包实例的【回收、清洗、装配、审核、灭菌开始、灭菌结束、效果监测、发货、签收】9个闭环流程的信息各自推送一次 + * 每个器械包实例的【科室申领、回收清点、清洗消毒、已装配、已审核、灭菌中、已灭菌、生物监测、物理监测、化学监测、已发货、复核/装载、灭菌开始、灭菌结束、效果监测、已签收、已使用】闭环流程的信息各自推送一次 */ @Override public void pushTousseInstanceAfterSign(Collection tousseInstances) { @@ -181,48 +248,137 @@ */ private List buildTousseInstanceDisinSupplyStatus(TousseInstance ti, Map pointCodePointNameMap) { List tiDisinSupplyStatus = new ArrayList(); - //回收 + + //科室申领 + String deptReqDisinSupplyStatus = buildDeptReqDisinSupplyStatus(ti, pointCodePointNameMap); + if(StringUtils.isNotBlank(deptReqDisinSupplyStatus)){ + tiDisinSupplyStatus.add(deptReqDisinSupplyStatus); + } + + //回收清点 String recyclingDisinSupplyStatus = buildRecyclingDisinSupplyStatus(ti, pointCodePointNameMap); if(StringUtils.isNotBlank(recyclingDisinSupplyStatus)){ tiDisinSupplyStatus.add(recyclingDisinSupplyStatus); } - //清洗 + //清洗消毒 List washDisinSupplyStatus = buildWashDisinSupplyStatus(ti, pointCodePointNameMap); if(CollectionUtils.isNotEmpty(washDisinSupplyStatus)){ tiDisinSupplyStatus.addAll(washDisinSupplyStatus); } - //包装、复核/装载/审核、审核 + //已装配、已审核、复核/装载 List packingReviewDisinSupplyStatus = buildPackingReviewDisinSupplyStatus(ti, pointCodePointNameMap); if(CollectionUtils.isNotEmpty(packingReviewDisinSupplyStatus)){ tiDisinSupplyStatus.addAll(packingReviewDisinSupplyStatus); } - //灭菌开始 - //灭菌结束 + //灭菌中\已灭菌\生物监测\物理监测\化学监测\灭菌开始\灭菌结束\效果监测 List sterilizationDisinSupplyStatus = buildSterilizationDisinSupplyStatus(ti, pointCodePointNameMap); if(CollectionUtils.isNotEmpty(sterilizationDisinSupplyStatus)){ tiDisinSupplyStatus.addAll(sterilizationDisinSupplyStatus); } - //发放 - //发货记录 + //已发货 List invoiceDisinSupplyStatus = buildInvoiceDisinSupplyStatus(ti, pointCodePointNameMap); if(CollectionUtils.isNotEmpty(invoiceDisinSupplyStatus)){ tiDisinSupplyStatus.addAll(invoiceDisinSupplyStatus); } - //科室接收 + //已签收 String signRecordDisinSupplyStatus = buildSignRecordDisinSupplyStatus(ti, pointCodePointNameMap); if(StringUtils.isNotBlank(signRecordDisinSupplyStatus)){ tiDisinSupplyStatus.add(signRecordDisinSupplyStatus); } + //已使用 + String useSupplyStatus = buildUseSupplyStatus(ti, pointCodePointNameMap); + if(StringUtils.isNotBlank(useSupplyStatus)){ + tiDisinSupplyStatus.add(useSupplyStatus); + } + return tiDisinSupplyStatus; } /** + * 已使用节点 + * @param ti 器械包实例 + * @param pointCodePointNameMap 节点名称 + * @return 使用闭环信息 + */ + private String buildUseSupplyStatus(TousseInstance ti, Map pointCodePointNameMap) { + if(!DatabaseUtil.isPoIdValid(ti.getUseRecord_id())){ + return null; + } + UseRecord useRecord = (UseRecord) objectDao.getById(UseRecord.class.getSimpleName(), ti.getUseRecord_id()); + if(useRecord == null){ + return null; + } + String operator = useRecord.getOperator(); + String operatorCode = searchUserCode(operator, useRecord.getDepartCoding()); + String pointCode = POINT_CODE_USED; + Long useRecordId = useRecord.getId(); + String execId = buildTousseInstanceExecIdByPointCode(ti, pointCode, useRecordId); + String disinSupplyStatus = buildDisinSupplyStatus(execId, useRecord.getDepartCoding(), + ti.getBarcode(), + pointCode, pointCodePointNameMap.get(pointCode), + operatorCode, operator, + useRecord.getDepartCoding(), useRecord.getDepart(), + ForgonDateUtils.safelyFormatDate(useRecord.getEnteringDate(), ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, "")); + return disinSupplyStatus; + } + + /** + * 科室申领节点 + * @param ti 器械包实例 + * @param pointCodePointNameMap 节点名称 + * @return 科室申领闭环信息 + */ + private String buildDeptReqDisinSupplyStatus(TousseInstance ti, Map pointCodePointNameMap) { + if(DatabaseUtil.isPoIdValid(ti.getInvoicePlanID())){ + InvoicePlan invoicePlan = (InvoicePlan) objectDao.getById(InvoicePlan.class.getSimpleName(), ti.getInvoicePlanID()); + if(invoicePlan != null){ + String applicant = invoicePlan.getApplicant(); + String applicantCode = searchUserCode(applicant, invoicePlan.getDepartCoding()); + String pointCode = POINT_CODE_DEPT_REQ; + Long invoicePlanId = invoicePlan.getId(); + String execId = buildTousseInstanceExecIdByPointCode(ti, pointCode, invoicePlanId); + String disinSupplyStatus = buildDisinSupplyStatus(execId, invoicePlan.getDepartCoding(), + ti.getBarcode(), + pointCode, pointCodePointNameMap.get(pointCode), + applicantCode, applicant, + invoicePlan.getDepartCoding(), invoicePlan.getDepart(), + ForgonDateUtils.safelyFormatDate(invoicePlan.getApplicationTime(), ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, "")); + return disinSupplyStatus; + } + } + //如物品没有申请信息,取回收信息。 + if(DatabaseUtil.isPoIdValid(ti.getRecyclingRecordId())){ + RecyclingRecord recyclingRecord = (RecyclingRecord) objectDao.getById(RecyclingRecord.class.getSimpleName(), ti.getRecyclingRecordId()); + if(recyclingRecord != null){ + String recycleOperatorName = recyclingRecord.getRecyclingUser(); + String recycleOperatorCode = searchUserCode(recycleOperatorName, ti.getOrgUnitCoding()); + String pointCode = POINT_CODE_DEPT_REQ; + Long recyclingRecordId = ti.getRecyclingRecordId(); + String execId = buildTousseInstanceExecIdByPointCode(ti, pointCode, recyclingRecordId); + String orgUnitName = ""; + OrgUnit orgUnit = orgUnitManager.getByCode(recyclingRecord.getOrgUnitCoding()); + if(orgUnit != null){ + orgUnitName = orgUnit.getName(); + } + String disinSupplyStatus = buildDisinSupplyStatus(execId, recyclingRecord.getOrgUnitCoding(), + ti.getBarcode(), + pointCode, pointCodePointNameMap.get(pointCode), + recycleOperatorCode, recycleOperatorName, + recyclingRecord.getOrgUnitCoding(), orgUnitName, + ForgonDateUtils.safelyFormatDate(recyclingRecord.getRecyclingTime(), ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, "")); + return disinSupplyStatus; + } + } + return null; + } + + /** * 签收 * @param ti * @param pointCodePointNameMap @@ -241,19 +397,17 @@ departName = orgUnit.getName(); } - Long bussId = signRecord.getId(); - String pointCode = "disinsupply_get"; - String execId = buildTousseInstanceExecIdByPointCode(ti, pointCode , bussId); - String orgCode = ti.getOrgUnitCoding(); - Long cycleIndexId = ti.getId(); + String pointCode = POINT_CODE_GET; + String execId = buildTousseInstanceExecIdByPointCode(ti, pointCode , signRecordId); + String orgCode = departCode; String pointName = pointCodePointNameMap.get(pointCode); String execUserCode = signRecord.getSignUserCode(); String execUserName = signRecord.getSignUserName(); String execDeptCode = departCode; String execDeptName = departName; String execTime = signDate; String disinSupplyStatus = buildDisinSupplyStatus(execId, orgCode, - ti.getId(), cycleIndexId, + ti.getBarcode(), pointCode, pointName, execUserCode, execUserName, execDeptCode, execDeptName, execTime); @@ -282,19 +436,22 @@ String senderCode = searchUserCode(senderName, ip.getOrgUnitCoding()); String delivertDateTime = ForgonDateUtils.safelyFormatDate(ip.getSendTime(), ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, ""); - Long bussId = ip.getId(); - String pointCode = "disinsupply_grant"; - String execId = buildTousseInstanceExecIdByPointCode(ti, pointCode , bussId); - String orgCode = ti.getOrgUnitCoding(); - Long cycleIndexId = ti.getId(); + Long invoiceId = ip.getId(); + String pointCode = POINT_CODE_GRANT; + String execId = buildTousseInstanceExecIdByPointCode(ti, pointCode, invoiceId); + String orgCode = ip.getOrgUnitCoding(); String pointName = pointCodePointNameMap.get(pointCode); String execUserCode = senderCode; String execUserName = senderName; - String execDeptCode = ti.getOrgUnitCoding(); - String execDeptName = ti.getOrgUnitName(); + String execDeptCode = ip.getOrgUnitCoding(); + String execDeptName = ""; + OrgUnit orgUnit = orgUnitManager.getByCode(execDeptCode); + if(orgUnit != null){ + execDeptName = orgUnit.getName(); + } String execTime = delivertDateTime; String disinSupplyStatus = buildDisinSupplyStatus(execId, orgCode, - ti.getId(), cycleIndexId, + ti.getBarcode(), pointCode, pointName, execUserCode, execUserName, execDeptCode, execDeptName, execTime); @@ -311,19 +468,22 @@ String senderCode = searchUserCode(senderName, ip2.getOrgUnitCoding()); String delivertDateTime = ForgonDateUtils.safelyFormatDate(ip2.getSendTime(), ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, ""); - Long bussId = ip2.getId(); - String pointCode = "disinsupply_grant"; - String execId = buildTousseInstanceExecIdByPointCode(ti, pointCode , bussId); - String orgCode = ti.getOrgUnitCoding(); - Long cycleIndexId = ti.getId(); + Long invoiceId = ip2.getId(); + String pointCode = POINT_CODE_GRANT; + String execId = buildTousseInstanceExecIdByPointCode(ti, pointCode, invoiceId); + String orgCode = ip2.getOrgUnitCoding(); String pointName = pointCodePointNameMap.get(pointCode); String execUserCode = senderCode; String execUserName = senderName; - String execDeptCode = ti.getOrgUnitCoding(); - String execDeptName = ti.getOrgUnitName(); + String execDeptCode = ip2.getOrgUnitCoding(); + String execDeptName = ""; + OrgUnit orgUnit = orgUnitManager.getByCode(execDeptCode); + if(orgUnit != null){ + execDeptName = orgUnit.getName(); + } String execTime = delivertDateTime; String disinSupplyStatus = buildDisinSupplyStatus(execId, orgCode, - ti.getId(), cycleIndexId, + ti.getBarcode(), pointCode, pointName, execUserCode, execUserName, execDeptCode, execDeptName, execTime); @@ -358,72 +518,85 @@ String biologicalMonitoringEndDateStr = ForgonDateUtils.safelyFormatDate(sterilizationRecord.getBiologicalMonitoringEndDate(), ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, ""); //灭菌开始 - /*Long bussId = sterilizationRecord.getId(); - String pointCode = "disinsupply_begin"; + Long bussId = sterilizationRecord.getId(); + String pointCode = POINT_CODE_STE_BEGIN; String execId = buildTousseInstanceExecIdByPointCode(ti, pointCode , bussId); - String orgCode = ti.getOrgUnitCoding(); - Long cycleIndexId = ti.getId(); + String orgCode = sterilizationRecord.getOrgUnitCoding(); String pointName = pointCodePointNameMap.get(pointCode); String execUserCode = sterilizationOperatorCode; String execUserName = sterilizationOperatorName; String execDeptCode = orgUnitCode; String execDeptName = orgUnitName; String execTime = sterilizationBeginTimeStr; String disinSupplyStatus = buildDisinSupplyStatus(execId, orgCode, - ti.getId(), cycleIndexId, + ti.getBarcode(), pointCode, pointName, execUserCode, execUserName, execDeptCode, execDeptName, execTime); tiDisinSupplyStatus.add(disinSupplyStatus); //灭菌结束 - pointCode = "disinsupply_end"; + pointCode = POINT_CODE_STE_END; execId = buildTousseInstanceExecIdByPointCode(ti, pointCode , bussId); - orgCode = ti.getOrgUnitCoding(); - cycleIndexId = ti.getId(); + orgCode = sterilizationRecord.getOrgUnitCoding(); pointName = pointCodePointNameMap.get(pointCode); execUserCode = sterilizationOperatorCode; execUserName = sterilizationOperatorName; execDeptCode = orgUnitCode; execDeptName = orgUnitName; execTime = sterilizationEndTimeStr; disinSupplyStatus = buildDisinSupplyStatus(execId, orgCode, - ti.getId(), cycleIndexId, + ti.getBarcode(), pointCode, pointName, execUserCode, execUserName, execDeptCode, execDeptName, execTime); - tiDisinSupplyStatus.add(disinSupplyStatus);*/ + tiDisinSupplyStatus.add(disinSupplyStatus); - //灭菌 - Long bussId = sterilizationRecord.getId(); - String pointCode = "disinsupply_disinfect"; - String execId = buildTousseInstanceExecIdByPointCode(ti, pointCode , bussId); - String orgCode = ti.getOrgUnitCoding(); - Long cycleIndexId = ti.getId(); - String pointName = pointCodePointNameMap.get(pointCode); - String execUserCode = sterilizationOperatorCode; - String execUserName = sterilizationOperatorName; - String execDeptCode = orgUnitCode; - String execDeptName = orgUnitName; - String execTime = sterilizationBeginTimeStr; - String disinSupplyStatus = buildDisinSupplyStatus(execId, orgCode, - ti.getId(), cycleIndexId, + //灭菌中 + Long sterilizationRecordId = sterilizationRecord.getId(); + pointCode = POINT_CODE_DISINFECT_DOING; + execId = buildTousseInstanceExecIdByPointCode(ti, pointCode , sterilizationRecordId); + orgCode = sterilizationRecord.getOrgUnitCoding(); + pointName = pointCodePointNameMap.get(pointCode); + execUserCode = sterilizationOperatorCode; + execUserName = sterilizationOperatorName; + execDeptCode = orgUnitCode; + execDeptName = orgUnitName; + execTime = sterilizationBeginTimeStr; + disinSupplyStatus = buildDisinSupplyStatus(execId, orgCode, + ti.getBarcode(), pointCode, pointName, execUserCode, execUserName, execDeptCode, execDeptName, execTime); tiDisinSupplyStatus.add(disinSupplyStatus); + //已灭菌 + pointCode = POINT_CODE_DISINFECT_DONE; + execId = buildTousseInstanceExecIdByPointCode(ti, pointCode , sterilizationRecordId); + orgCode = sterilizationRecord.getOrgUnitCoding(); + pointName = pointCodePointNameMap.get(pointCode); + execUserCode = sterilizationOperatorCode; + execUserName = sterilizationOperatorName; + execDeptCode = orgUnitCode; + execDeptName = orgUnitName; + execTime = sterilizationEndTimeStr; + disinSupplyStatus = buildDisinSupplyStatus(execId, orgCode, + ti.getBarcode(), + pointCode, pointName, + execUserCode, execUserName, + execDeptCode, execDeptName, execTime); + tiDisinSupplyStatus.add(disinSupplyStatus); + //生物监测 String biologyResult = sterilizationRecord.getBiologyResult(); if((StringUtils.equals(biologyResult, SterilizationRecord.MONITOR_RESULT_QUALIFIED) || StringUtils.equals(biologyResult, SterilizationRecord.MONITOR_RESULT_UNQUALIFIED)) && StringUtils.isNotBlank(biologicalMonitoringEndDateStr)){ String monitorUserName = sterilizationRecord.getMonitorUser(); String monitorUserCode = searchUserCode(monitorUserName, orgUnitCode); - pointCode = "disinsupply_biomonitoring"; - execId = buildTousseInstanceExecIdByPointCode(ti, pointCode , bussId); - orgCode = ti.getOrgUnitCoding(); - cycleIndexId = ti.getId(); + pointCode = POINT_CODE_DISINFECT_BIO_MONITOR; + execId = buildTousseInstanceExecIdByPointCode(ti, pointCode , sterilizationRecordId); + orgCode = sterilizationRecord.getOrgUnitCoding(); pointName = pointCodePointNameMap.get(pointCode); execUserCode = monitorUserCode; execUserName = monitorUserName; @@ -432,7 +605,7 @@ execTime = biologicalMonitoringEndDateStr; String execStatus = returnExecStatus(biologyResult); disinSupplyStatus = buildDisinSupplyStatus(execId, orgCode, - ti.getId(), cycleIndexId, + ti.getBarcode(), pointCode, pointName, execUserCode, execUserName, execDeptCode, execDeptName, execTime, execStatus); @@ -444,10 +617,9 @@ String physicsResult = sterilizationRecord.getPhysicsResult(); if(StringUtils.equals(physicsResult, SterilizationRecord.MONITOR_RESULT_QUALIFIED) || StringUtils.equals(physicsResult, SterilizationRecord.MONITOR_RESULT_UNQUALIFIED)){ - pointCode = "disinsupply_physicalmonitoring"; - execId = buildTousseInstanceExecIdByPointCode(ti, pointCode , bussId); - orgCode = ti.getOrgUnitCoding(); - cycleIndexId = ti.getId(); + pointCode = POINT_CODE_DISINFECT_PHYSICAL_MONITOR; + execId = buildTousseInstanceExecIdByPointCode(ti, pointCode , sterilizationRecordId); + orgCode = sterilizationRecord.getOrgUnitCoding(); pointName = pointCodePointNameMap.get(pointCode); execUserCode = sterilizationOperatorCode; execUserName = sterilizationOperatorName; @@ -456,25 +628,24 @@ execTime = sterilizationEndTimeStr; String execStatus = returnExecStatus(physicsResult); disinSupplyStatus = buildDisinSupplyStatus(execId, orgCode, - ti.getId(), cycleIndexId, + ti.getBarcode(), pointCode, pointName, execUserCode, execUserName, execDeptCode, execDeptName, execTime, execStatus); tiDisinSupplyStatus.add(disinSupplyStatus); //效果监测 - pointCode = "disinsupply_check"; - execId = buildTousseInstanceExecIdByPointCode(ti, pointCode , bussId); - orgCode = ti.getOrgUnitCoding(); - cycleIndexId = ti.getId(); + pointCode = POINT_CODE_CHECK; + execId = buildTousseInstanceExecIdByPointCode(ti, pointCode , sterilizationRecordId); + orgCode = sterilizationRecord.getOrgUnitCoding(); pointName = pointCodePointNameMap.get(pointCode); execUserCode = sterilizationOperatorCode; execUserName = sterilizationOperatorName; execDeptCode = orgUnitCode; execDeptName = orgUnitName; execTime = sterilizationEndTimeStr; disinSupplyStatus = buildDisinSupplyStatus(execId, orgCode, - ti.getId(), cycleIndexId, + ti.getBarcode(), pointCode, pointName, execUserCode, execUserName, execDeptCode, execDeptName, execTime, execStatus); @@ -486,10 +657,9 @@ String chemistryResult = sterilizationRecord.getChemistryResult(); if(StringUtils.equals(chemistryResult, SterilizationRecord.MONITOR_RESULT_QUALIFIED) || StringUtils.equals(chemistryResult, SterilizationRecord.MONITOR_RESULT_UNQUALIFIED)){ - pointCode = "disinsupply_chemicalmonitoring"; - execId = buildTousseInstanceExecIdByPointCode(ti, pointCode , bussId); - orgCode = ti.getOrgUnitCoding(); - cycleIndexId = ti.getId(); + pointCode = POINT_CODE_DISINFECT_CHEMICAL_MONITOR; + execId = buildTousseInstanceExecIdByPointCode(ti, pointCode, sterilizationRecordId); + orgCode = sterilizationRecord.getOrgUnitCoding(); pointName = pointCodePointNameMap.get(pointCode); execUserCode = sterilizationOperatorCode; execUserName = sterilizationOperatorName; @@ -498,7 +668,7 @@ execTime = sterilizationEndTimeStr; String execStatus = returnExecStatus(chemistryResult); disinSupplyStatus = buildDisinSupplyStatus(execId, orgCode, - ti.getId(), cycleIndexId, + ti.getBarcode(), pointCode, pointName, execUserCode, execUserName, execDeptCode, execDeptName, execTime, execStatus); @@ -539,24 +709,24 @@ return packingReviewDisinSupplyStatus; } - //包装 + //已装配 String packingDisinSupplyStatus = buildPackingDisinSupplyStatus(ti, pointCodePointNameMap, packingRecord); if(StringUtils.isNotBlank(packingDisinSupplyStatus)){ packingReviewDisinSupplyStatus.add(packingDisinSupplyStatus); } - //复核/装载/审核 - String reviewDisinSupplyStatus1 = buildReviewDisinSupplyStatus(ti, "disinsupply_valid", pointCodePointNameMap, packingRecord); - if(StringUtils.isNotBlank(reviewDisinSupplyStatus1)){ - packingReviewDisinSupplyStatus.add(reviewDisinSupplyStatus1); - } - //审核 - String reviewDisinSupplyStatus2 = buildReviewDisinSupplyStatus(ti, "disinsupply_process", pointCodePointNameMap, packingRecord); + String reviewDisinSupplyStatus2 = buildReviewDisinSupplyStatus(ti, POINT_CODE_PROCESS, pointCodePointNameMap, packingRecord); if(StringUtils.isNotBlank(reviewDisinSupplyStatus2)){ packingReviewDisinSupplyStatus.add(reviewDisinSupplyStatus2); } + //复核/装载/审核 + String reviewDisinSupplyStatus1 = buildReviewDisinSupplyStatus(ti, POINT_CODE_VALID, pointCodePointNameMap, packingRecord); + if(StringUtils.isNotBlank(reviewDisinSupplyStatus1)){ + packingReviewDisinSupplyStatus.add(reviewDisinSupplyStatus1); + } + return packingReviewDisinSupplyStatus; } @@ -569,18 +739,17 @@ private String buildReviewDisinSupplyStatus(TousseInstance ti, String pointCode, Map pointCodePointNameMap, PackingRecord packingRecord) { if(packingRecord != null && StringUtils.isNotBlank(ti.getReviewerCode())){ - Long bussId = packingRecord.getId(); - String execId = buildTousseInstanceExecIdByPointCode(ti, pointCode , bussId); - String orgCode = ti.getOrgUnitCoding(); - Long cycleIndexId = ti.getId(); + Long packingRecordId = packingRecord.getId(); + String execId = buildTousseInstanceExecIdByPointCode(ti, pointCode , packingRecordId); + String orgCode = packingRecord.getOrgUnitCoding(); String pointName = pointCodePointNameMap.get(pointCode); String execUserCode = ti.getReviewerCode(); String execUserName = ti.getReviewer(); - String execDeptCode = ti.getOrgUnitCoding(); - String execDeptName = ti.getOrgUnitName(); + String execDeptCode = packingRecord.getOrgUnitCoding(); + String execDeptName = packingRecord.getOrgUnitName(); String execTime = ForgonDateUtils.safelyFormatDate(ti.getReviewTime(), ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, ""); String disinSupplyStatus = buildDisinSupplyStatus(execId, orgCode, - ti.getId(), cycleIndexId, + ti.getBarcode(), pointCode, pointName, execUserCode, execUserName, execDeptCode, execDeptName, execTime); @@ -591,26 +760,25 @@ } /** - * 装配 + * 已装配 * @param ti * @param pointCodePointNameMap * @return */ private String buildPackingDisinSupplyStatus(TousseInstance ti, Map pointCodePointNameMap, PackingRecord packingRecord) { if(packingRecord != null){ - Long bussId = packingRecord.getId(); - String pointCode = "disinsupply_packing"; - String execId = buildTousseInstanceExecIdByPointCode(ti, pointCode , bussId); - String orgCode = ti.getOrgUnitCoding(); - Long cycleIndexId = ti.getId(); + Long packingRecordId = packingRecord.getId(); + String pointCode = POINT_CODE_PACKING; + String execId = buildTousseInstanceExecIdByPointCode(ti, pointCode , packingRecordId); + String orgCode = packingRecord.getOrgUnitCoding(); String pointName = pointCodePointNameMap.get(pointCode); String execUserCode = ti.getOperatorCode(); String execUserName = ti.getOperator(); - String execDeptCode = ti.getOrgUnitCoding(); - String execDeptName = ti.getOrgUnitName(); + String execDeptCode = packingRecord.getOrgUnitCoding(); + String execDeptName = packingRecord.getOrgUnitName(); String execTime = ForgonDateUtils.safelyFormatDate(packingRecord.getPackTime(), ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, ""); String disinSupplyStatus = buildDisinSupplyStatus(execId, orgCode, - ti.getId(), cycleIndexId, + ti.getBarcode(), pointCode, pointName, execUserCode, execUserName, execDeptCode, execDeptName, execTime); @@ -646,20 +814,22 @@ } if(CollectionUtils.isNotEmpty(washAndDisinfectRecordSet)){ List washDisinSupplyStatus = new ArrayList(); - String pointCode = "disinsupply_clean"; + String pointCode = POINT_CODE_CLEAN; for (WashAndDisinfectRecord washAndDisinfectRecord : washAndDisinfectRecordSet) { - Long bussId = washAndDisinfectRecord.getId(); - String execId = buildTousseInstanceExecIdByPointCode(ti, pointCode, bussId); - String orgCode = ti.getOrgUnitCoding(); - Long cycleIndexId = ti.getId(); + Long washAndDisinfectRecordId = washAndDisinfectRecord.getId(); + String execId = buildTousseInstanceExecIdByPointCode(ti, pointCode, washAndDisinfectRecordId); String pointName = pointCodePointNameMap.get(pointCode); String execUserCode = washAndDisinfectRecord.getOperatorCode(); String execUserName = washAndDisinfectRecord.getOperator(); - String execDeptCode = ti.getOrgUnitCoding(); - String execDeptName = ti.getOrgUnitName(); + String execDeptCode = washAndDisinfectRecord.getOrgUnitCoding(); + String execDeptName = ""; + OrgUnit orgUnit = orgUnitManager.getByCode(execDeptCode); + if(orgUnit != null){ + execDeptName = orgUnit.getName(); + } String execTime = washAndDisinfectRecord.getStartDateStr(); - String disinSupplyStatus = buildDisinSupplyStatus(execId, orgCode, - ti.getId(), cycleIndexId, + String disinSupplyStatus = buildDisinSupplyStatus(execId, execDeptCode, + ti.getBarcode(), pointCode, pointName, execUserCode, execUserName, execDeptCode, execDeptName, execTime); @@ -684,14 +854,19 @@ if(recyclingRecord != null){ String recycleOperatorName = recyclingRecord.getRecyclingUser(); String recycleOperatorCode = searchUserCode(recycleOperatorName, ti.getOrgUnitCoding()); - String pointCode = "disinsupply_retrieve"; - Long bussId = ti.getRecyclingRecordId(); - String execId = buildTousseInstanceExecIdByPointCode(ti, pointCode, bussId); - String disinSupplyStatus = buildDisinSupplyStatus(execId, ti.getOrgUnitCoding(), - ti.getId(), ti.getId(), + String pointCode = POINT_CODE_RECYCLE; + Long recyclingRecordId = ti.getRecyclingRecordId(); + String execId = buildTousseInstanceExecIdByPointCode(ti, pointCode, recyclingRecordId); + String orgUnitName = ""; + OrgUnit orgUnit = orgUnitManager.getByCode(recyclingRecord.getOrgUnitCoding()); + if(orgUnit != null){ + orgUnitName = orgUnit.getName(); + } + String disinSupplyStatus = buildDisinSupplyStatus(execId, recyclingRecord.getOrgUnitCoding(), + ti.getBarcode(), pointCode, pointCodePointNameMap.get(pointCode), recycleOperatorCode, recycleOperatorName, - ti.getOrgUnitCoding(), ti.getOrgUnitName(), + recyclingRecord.getOrgUnitCoding(), orgUnitName, ForgonDateUtils.safelyFormatDate(recyclingRecord.getRecyclingTime(), ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMMSS, "")); return disinSupplyStatus; } @@ -701,50 +876,50 @@ /** * 器械包的闭环信息 - * @param execId - * @param orgCode - * @param bussId - * @param cycleIndexId - * @param pointCode - * @param pointName - * @param execUserCode - * @param execUserName - * @param execDeptCode - * @param execDeptName - * @param execTime + * @param execId 执行记录ID=ti.getId() + "_" + pointCode + "_" + bussId; + * @param orgCode 业务场景发生的机构编码 + * @param barcode 器械包实例条码 + * @param pointCode 事件编码 + * @param pointName 事件名称 + * @param execUserCode 操作人工号 + * @param execUserName 操作人姓名 + * @param execDeptCode 操作人科室编码 + * @param execDeptName 操作人科室名称 + * @param execTime 实际操作日期时间 * @return */ - private String buildDisinSupplyStatus(String execId, String orgCode, Long bussId, Long cycleIndexId, String pointCode, String pointName, + private String buildDisinSupplyStatus(String execId, String orgCode, String barcode, String pointCode, String pointName, String execUserCode, String execUserName, String execDeptCode, String execDeptName, String execTime) { - return buildDisinSupplyStatus(execId, orgCode, bussId, cycleIndexId, pointCode, pointName, execUserCode, execUserName, execDeptCode, execDeptName, execTime, "1"); + return buildDisinSupplyStatus(execId, orgCode, barcode, pointCode, pointName, execUserCode, execUserName, execDeptCode, execDeptName, execTime, "1"); } /** * 器械包的闭环信息 - * @param execId - * @param orgCode - * @param bussId - * @param cycleIndexId - * @param pointCode - * @param pointName - * @param execUserCode - * @param execUserName - * @param execDeptCode - * @param execDeptName - * @param execTime - * @param execStatus + * @param execId 执行记录ID=ti.getId() + "_" + pointCode + "_" + bussId; + * @param orgCode 业务场景发生的机构编码 + * @param barcode 器械包实例条码 + * @param bussId 业务流水号,申请单id、回收记录id等 + * @param pointCode 事件编码 + * @param pointName 事件名称 + * @param execUserCode 操作人工号 + * @param execUserName 操作人姓名 + * @param execDeptCode 操作人科室编码 + * @param execDeptName 操作人科室名称 + * @param execTime 实际操作日期时间 + * @param execStatus 操作状态代码 * @return */ - private String buildDisinSupplyStatus(String execId, String orgCode, Long bussId, Long cycleIndexId, String pointCode, String pointName, + private String buildDisinSupplyStatus(String execId, String orgCode, String barcode, String pointCode, String pointName, String execUserCode, String execUserName, String execDeptCode, String execDeptName, String execTime, String execStatus) { StringBuffer messageBuffer = new StringBuffer(); orgCode = orgUnitManager.getOrgForeignKeyByOrgUnitCodingForSync(orgCode); execDeptCode = orgUnitManager.getOrgForeignKeyByOrgUnitCodingForSync(execDeptCode); messageBuffer.append(""); messageBuffer.append("" + StringUtils.defaultString(execId) + ""); messageBuffer.append("" + StringUtils.defaultString(orgCode) + ""); - messageBuffer.append("" + StringUtils.defaultString(buildBussId(bussId)) + ""); - messageBuffer.append("" + cycleIndexId + ""); + messageBuffer.append("" + barcode + ""); + //cycleIndexId=闭环编码(DISINSUPPLY)_机构编码_器械包实例条码 + messageBuffer.append("" + StringUtils.defaultString(buildCycleIndexId(barcode)) + ""); messageBuffer.append(""); messageBuffer.append(""); messageBuffer.append(""); @@ -779,12 +954,12 @@ /** * 一次闭环的索引ID(一个闭环内相同)。 - * 需要按实际业务情况确定(多个业务字段进行拼接)闭环编码(DISINSUPPLY)_机构编码_器械包实例id - * @param bussId - * @return + * 需要按实际业务情况确定(多个业务字段进行拼接)闭环编码(DISINSUPPLY)_机构编码_器械包实例条码 + * @param barcode 器械包实例条码 + * @return cycleIndexId */ - private String buildBussId(Long bussId){ - return "DISINSUPPLY_" + DatasyncConstant.TARGET_ORG + "_" + bussId; + private String buildCycleIndexId(String barcode){ + return "DISINSUPPLY_" + DatasyncConstant.TARGET_ORG + "_" + barcode; } /** @@ -793,7 +968,7 @@ */ private Map getPointCodePointNameMap(){ Map pointCodePointNameMap = new HashMap(); - pointCodePointNameMap.put("disinsupply_retrieve", "回收"); + /*pointCodePointNameMap.put("disinsupply_retrieve", "回收"); pointCodePointNameMap.put("disinsupply_clean", "清洗"); pointCodePointNameMap.put("disinsupply_packing", "包装"); pointCodePointNameMap.put("disinsupply_disinfect", "灭菌"); @@ -809,7 +984,30 @@ pointCodePointNameMap.put("disinsupply_chemicalmonitoring", "化学监测"); pointCodePointNameMap.put("disinsupply_check", "效果监测"); - pointCodePointNameMap.put("disinsupply_get", "科室接收"); + pointCodePointNameMap.put("disinsupply_get", "科室接收");*/ + + pointCodePointNameMap.put(POINT_CODE_DEPT_REQ, "科室申领"); + pointCodePointNameMap.put(POINT_CODE_RECYCLE, "回收清点"); + pointCodePointNameMap.put(POINT_CODE_CLEAN, "清洗消毒"); + pointCodePointNameMap.put(POINT_CODE_PACKING, "已装配"); + + pointCodePointNameMap.put(POINT_CODE_PROCESS, "已审核"); + pointCodePointNameMap.put(POINT_CODE_DISINFECT_DOING, "灭菌中"); + pointCodePointNameMap.put(POINT_CODE_DISINFECT_DONE, "已灭菌"); + pointCodePointNameMap.put(POINT_CODE_DISINFECT_BIO_MONITOR, "生物监测"); + + pointCodePointNameMap.put(POINT_CODE_DISINFECT_PHYSICAL_MONITOR, "物理监测"); + pointCodePointNameMap.put(POINT_CODE_DISINFECT_CHEMICAL_MONITOR, "化学监测"); + pointCodePointNameMap.put(POINT_CODE_GRANT, "已发货"); + pointCodePointNameMap.put(POINT_CODE_VALID, "复核/装载"); + + pointCodePointNameMap.put(POINT_CODE_STE_BEGIN, "灭菌开始"); + pointCodePointNameMap.put(POINT_CODE_STE_END, "灭菌结束"); + pointCodePointNameMap.put(POINT_CODE_CHECK, "效果监测"); + pointCodePointNameMap.put(POINT_CODE_GET, "已签收"); + + pointCodePointNameMap.put(POINT_CODE_USED, "已使用"); + return pointCodePointNameMap; } @@ -842,4 +1040,65 @@ return userName; } + @Override + public void pushTousseInstanceAfterConvertUseRecord(Collection tousseInstances) { + + if(CollectionUtils.isEmpty(tousseInstances)){ + return; + } + + try { + logger.debug("开始调用互联互通闭环流程接口(使用记录转换申请单后调用),器械包实例总数为:" + tousseInstances.size()); + List disinSupplyStatusList = buildUseDisinSupplyStatus(tousseInstances); + if(CollectionUtils.isNotEmpty(disinSupplyStatusList)){ + new Thread(()->{ + logger.debug("使用记录转换申请单后调用互联互通闭环流程接口(使用记录转换申请单后调用)请求信息msgBody总数:" + disinSupplyStatusList.size()); + for (String msgBody : disinSupplyStatusList) { + try { + String msgHeader = WebServiceClientHelper.buildRequestMsgHeader(DatasyncConstant.SERVICE_NAME_SEND_DISIN_SUPPLY_STATUS, DatasyncConstant.CALL_ORG, DatasyncConstant.TARGET_ORG); + logger.debug("使用记录转换申请单后调用互联互通闭环流程接口(使用记录转换申请单后调用)请求信息msgHeader:" + msgHeader); + logger.debug("使用记录转换申请单后调用互联互通闭环流程接口(使用记录转换申请单后调用)请求信息msgBody:" + msgBody); + String result = WebServiceClientHelper.invokeCallBackInterface(msgHeader, msgBody, DatasyncConstant.CALL_BACK_ADDRESS); + logger.debug("使用记录转换申请单后调用互联互通闭环流程接口(使用记录转换申请单后调用)返回信息:" + result); + } catch (Exception e) { + logger.debug("使用记录转换申请单后调用互联互通闭环流程接口(使用记录转换申请单后调用)失败:" + e.getMessage()); + e.printStackTrace(); + } + } + logger.debug("结束调用互联互通闭环流程接口(使用记录转换申请单后调用),器械包实例总数为:" + tousseInstances.size()); + }).start(); + } + } catch (Exception e) { + e.printStackTrace(); + logger.debug("使用记录转换申请单后调用互联互通闭环流程接口(使用记录转换申请单后调用)失败:" + e.getMessage()); + } + + } + + /** + * 构建使用记录闭环流程信息 + * @param tousseInstances 器械包实例 + * @return 使用记录闭环流程信息 + */ + private List buildUseDisinSupplyStatus(Collection tousseInstances) { + List disinSupplyStatus = new ArrayList(); + Map pointCodePointNameMap = getPointCodePointNameMap(); + for (TousseInstance ti : tousseInstances) { + if(ti.getTousseDefinition().isDisinfection()){ + //消毒物品的数据不用上传。 + continue; + } + if(StringUtils.isBlank(ti.getSignedUser())){ + //没有签收的器械包,录入使用记录时,不需要再推送 + continue; + } + //已使用 + String useSupplyStatus = buildUseSupplyStatus(ti, pointCodePointNameMap); + if(StringUtils.isNotBlank(useSupplyStatus)){ + disinSupplyStatus.add(useSupplyStatus); + } + } + return disinSupplyStatus; + } + } Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java =================================================================== diff -u -r40649 -r41196 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 40649) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 41196) @@ -78,6 +78,7 @@ import com.forgon.disinfectsystem.basedatamanager.warehouse.service.WareHouseManager; import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.datasynchronization.dao.FindPatientSurgicalStatusDao; +import com.forgon.disinfectsystem.datasynchronization.dao.TousseInstancePushDao; import com.forgon.disinfectsystem.datasynchronization.dao.UseRecordPushDao; import com.forgon.disinfectsystem.datasynchronization.model.OperationInfoVo; import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; @@ -268,7 +269,13 @@ private UrgentReservationGroupManager urgentReservationGroupManager; private IDCardDefinitionManager idCardDefinitionManager; + + private TousseInstancePushDao tousseInstancePushDao; + public void setTousseInstancePushDao(TousseInstancePushDao tousseInstancePushDao) { + this.tousseInstancePushDao = tousseInstancePushDao; + } + public void setIdCardDefinitionManager(IDCardDefinitionManager idCardDefinitionManager) { this.idCardDefinitionManager = idCardDefinitionManager; } @@ -8412,6 +8419,15 @@ } } } + if(tousseInstancePushDao != null){ + for (UseRecord useRecord : useRecordList) { + try { + tousseInstancePushDao.pushTousseInstanceAfterConvertUseRecord(useRecord.getTousseInstanceList(objectDao)); + } catch (Exception e) { + e.printStackTrace(); + } + } + } return returnMsg; } Index: ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/TousseInstancePushDao.java =================================================================== diff -u -r39670 -r41196 --- ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/TousseInstancePushDao.java (.../TousseInstancePushDao.java) (revision 39670) +++ ssts-datasync/src/main/java/com/forgon/disinfectsystem/datasynchronization/dao/TousseInstancePushDao.java (.../TousseInstancePushDao.java) (revision 41196) @@ -50,6 +50,14 @@ } /** + * 器械包录入使用记录并转换申请单后,将使用记录信息推送到第三方平台SZSLGZXYY-42 + * @param tousseInstances + */ + public default void pushTousseInstanceAfterConvertUseRecord(Collection tousseInstances) { + + } + + /** * 定时器推送闭环流程信息 */ public default void timingPushCloseLoopMessage() {