Index: ssts-qualitymon/src/main/java/com/forgon/disinfectsystem/qualitymonitoring/instance/service/QualityMonitoringInstanceManager.java =================================================================== diff -u -r26768 -r27704 --- ssts-qualitymon/src/main/java/com/forgon/disinfectsystem/qualitymonitoring/instance/service/QualityMonitoringInstanceManager.java (.../QualityMonitoringInstanceManager.java) (revision 26768) +++ ssts-qualitymon/src/main/java/com/forgon/disinfectsystem/qualitymonitoring/instance/service/QualityMonitoringInstanceManager.java (.../QualityMonitoringInstanceManager.java) (revision 27704) @@ -3,6 +3,10 @@ import java.util.List; import java.util.Map; +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.qualitymonitoringmanager.qualitymonitoring.QualityMonitoringInstance; import com.forgon.tools.hibernate.BasePoManager; @@ -32,5 +36,26 @@ * @param status 要修改的目标状态(未审核或已审核) */ public void updateStatus(List idList , String status); + + /** + * 扫描标识牌/器械包条码,获取器械包实例回收记录和灭菌记录 + * @param barcode + * @return + */ + public JSONObject scanBarcodeForTousseInfo(String barcode); + + /** + * 扫描篮筐条码,获取清洗记录列表 + * @param basketBarcode 清洗篮筐条码 + * @return + */ + public JSONArray scanBarcodeForWashRecordInfo(String basketBarcode); + + /** + * 根据包实例查询回收记录和灭菌记录 + * @param ti + * @return + */ + public JSONObject buildTousseJSON(TousseInstance ti); } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/qualitymonitoringmanager/qualitymonitoringconfig/QualityMonitoringDefinition.java =================================================================== diff -u -r27374 -r27704 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/qualitymonitoringmanager/qualitymonitoringconfig/QualityMonitoringDefinition.java (.../QualityMonitoringDefinition.java) (revision 27374) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/qualitymonitoringmanager/qualitymonitoringconfig/QualityMonitoringDefinition.java (.../QualityMonitoringDefinition.java) (revision 27704) @@ -72,7 +72,21 @@ */ private String showSterilizerNumFrequency; + /** + * 监测项是否录入回收信息(DGZYY-161) + */ + private String recordRecycleInformation = Constants.STR_NO; + /** + * 监测项是否录入清洗信息(DGZYY-161) + */ + private String recordRinseInformation = Constants.STR_NO; + + /** + * 监测项是否录入灭菌信息(DGZYY-161) + */ + private String recordSterilizatioInformation = Constants.STR_NO; + public String getResponsibilityPart() { return responsibilityPart; } @@ -104,6 +118,32 @@ public void setShowSterilizerNumFrequency(String showSterilizerNumFrequency) { this.showSterilizerNumFrequency = showSterilizerNumFrequency; } + + public String getRecordRecycleInformation() { + return recordRecycleInformation; + } + + public void setRecordRecycleInformation(String recordRecycleInformation) { + this.recordRecycleInformation = recordRecycleInformation; + } + + public String getRecordRinseInformation() { + return recordRinseInformation; + } + + public void setRecordRinseInformation(String recordRinseInformation) { + this.recordRinseInformation = recordRinseInformation; + } + + public String getRecordSterilizatioInformation() { + return recordSterilizatioInformation; + } + + public void setRecordSterilizatioInformation( + String recordSterilizatioInformation) { + this.recordSterilizatioInformation = recordSterilizatioInformation; + } + /** * 获取责任环节的过滤条件 * @param responsibility Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/customform/formdefinition/FormDefinitionItem.java =================================================================== diff -u -r23637 -r27704 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/customform/formdefinition/FormDefinitionItem.java (.../FormDefinitionItem.java) (revision 23637) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/customform/formdefinition/FormDefinitionItem.java (.../FormDefinitionItem.java) (revision 27704) @@ -44,6 +44,11 @@ private String type; private String requirement; // 必填、可选 + + /** + * 质量监测元素列表里增加“重复填写”的下拉选择框,默认为“否”(DGZYY-161) + */ + private String repeatWrite = Constants.STR_NO; public final static String TYPE_DATE = "日期"; public final static String TYPE_TIME = "时间"; @@ -116,6 +121,14 @@ this.requirement = requirement; } + public String getRepeatWrite() { + return repeatWrite; + } + + public void setRepeatWrite(String repeatWrite) { + this.repeatWrite = repeatWrite; + } + public Integer getOrderNumber() { return orderNumber; } Index: ssts-customform/src/main/java/com/forgon/disinfectsystem/customform/formdefinition/action/FormDefinitionAction.java =================================================================== diff -u -r22745 -r27704 --- ssts-customform/src/main/java/com/forgon/disinfectsystem/customform/formdefinition/action/FormDefinitionAction.java (.../FormDefinitionAction.java) (revision 22745) +++ ssts-customform/src/main/java/com/forgon/disinfectsystem/customform/formdefinition/action/FormDefinitionAction.java (.../FormDefinitionAction.java) (revision 27704) @@ -1,20 +1,27 @@ package com.forgon.disinfectsystem.customform.formdefinition.action; import java.io.IOException; +import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Set; +import javax.persistence.Transient; + import net.sf.json.JSONArray; import net.sf.json.JSONObject; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.StringUtils; import org.apache.log4j.Logger; import org.apache.struts2.convention.annotation.Action; import org.apache.struts2.convention.annotation.Namespace; import org.apache.struts2.convention.annotation.ParentPackage; +import com.forgon.Constants; import com.forgon.disinfectsystem.customform.formdefinition.service.FormDefinitionManager; import com.forgon.disinfectsystem.customform.forminstance.service.FormInstanceManager; import com.forgon.disinfectsystem.entity.customform.formdefinition.FormDefinition; @@ -25,6 +32,7 @@ import com.forgon.tools.StrutsResponseUtils; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.json.JSONUtil; +import com.forgon.util.StringUtil; import com.opensymphony.xwork2.ModelDriven; /** @@ -156,6 +164,75 @@ } /** + * 根据id获取加载“自定义表单定义”,前台“添加监测元素信息”时调用 + * 只获取"重复填写"为“是”的“自定义表单配置项”以及被该配置项触发的其它配置项(DGZYY-161) + * 表单配置项id和"自定义表单项的配置参数"的触发项id(valueTriggerItemIds),拼接了添加次数 + * 例如:{"id":"20713_1","optionsJson":"[{"id":1314,"name":"02-1","isStatisticsItem":"","orderNumber":1,"valueTriggerItemIds":",20714_1,29715_1","valueTriggerItemNames":"333"}]"} + */ + public void loadFormDefinitionWithRepeateItem() { + StrutsParamUtils.getResponse().setCharacterEncoding("UTF-8"); + String id = StrutsParamUtils.getPraramValue("id", ""); + Integer clickAmount = StrutsParamUtils.getPraramValue("clickAmount", 0); + if(DatabaseUtil.isPoIdValid(id)){ + formDefinition = formDefinitionManager.getFormDefinitionById(id); + } + Set repeatItems = new HashSet(); + List items = formDefinition.getItems(); + for (FormDefinitionItem item : items) { + if(StringUtils.equals(item.getRepeatWrite(), Constants.STR_YES) || + StringUtils.equals(item.getIsTriggerItem(), Constants.STR_YES)){ + List options = item.getOptions(); + Collections.sort(options); + repeatItems.add(item); + } + } + List tempItems = new ArrayList(repeatItems); + Collections.sort(tempItems); + formDefinition.setItems(tempItems); + Map map = new HashMap(); + map.put("success", true); + map.put("data", formDefinition); + + JSONObject jsonObject = JSONObject.fromObject(map); + + JSONArray itemArr = jsonObject.optJSONObject("data").optJSONArray("items"); + if(clickAmount != null && clickAmount.intValue() > 0){ + if(itemArr != null && itemArr.size() > 0){ + for (int i=0;i 0){ + for(int j=0;j map = StrutsParamUtils.getParameters(); + boolean success = true; + String message = "保存成功!"; + try { + // 抽检器械包和抽检器械,以及和抽检器械包和抽检器械关联的检测项 + String tousseMaterialInstanceInfo = map.get("tousseMaterialInstanceInfo"); + JSONObject tousseMaterialInstanceJSON = JSONObject.fromObject(tousseMaterialInstanceInfo); + if(tousseMaterialInstanceJSON == null){ + throw new RuntimeException("抽检器械不能为空"); + } + JSONArray tousseInstanceInfos = tousseMaterialInstanceJSON.optJSONArray("tousseInstanceInfos"); + if(tousseInstanceInfos == null || tousseInstanceInfos.size() == 0){ + throw new RuntimeException("抽检器械不能为空"); + } + + // 填写了多少个监测元素信息(抽检器械和监测项),就要保存多少条质量监测监测记录 + for(int i=0 ; i tempMap = new HashMap(); + if(DatabaseUtil.isPoIdValid(qualityMonitoringInstance.getId())){ + tempInstance = qualityMonitoringInstance; + } else { + BeanUtils.copyProperties(qualityMonitoringInstance, tempInstance); + } + // tousseBarcode + "@" + tousseInstanceId + "@" + tousseName + "@" + tousseAmount + "@" + tousseRecycle+ "@" + tousseRePacking+ "@" + order +";" + String tousseInstanceInfo = ""; + // material +"@"+ amount + "@" + position + "@" + order; + String materialInfo = ""; + + JSONArray tousseBags = tousseInstanceInfos.optJSONObject(i).optJSONArray("tousseBags"); + if(tousseBags == null || tousseBags.size() == 0){ + throw new RuntimeException("抽检器械参数错误"); + } + for(int j=0;j 0){ + for(int k=0;k it = configItemOption.keys(); + while(it.hasNext()){ + String key = String.valueOf(it.next()); + Object value = configItemOption.get(key); + if(StringUtils.equals(key.split("_")[0], "configItemOptionSterName")){ + // 质量监测记录的炉号(如果抽检器械扫的第一个包实例id为空时,炉号就取这个值) + tempMap.put("sterilizerName", (String)value); + tempMap.put("configItemOptionSterName", (String)value); + } else if (StringUtils.equals(key.split("_")[0], "configItemOptionSterFre")){ + // 质量监测记录的炉次(如果抽检器械扫的第一个包实例id为空时,炉次就取这个值) + tempMap.put("sterilizerFre", (String)value); + tempMap.put("configItemOptionSterFre", (String)value); + } else if(value instanceof String){ + tempMap.put(key.split("_")[0], (String) value); + } else if(value instanceof Integer){ + Integer number = (Integer)value; + tempMap.put(key.split("_")[0], number.toString()); + } + } + } + qualityMonitoringInstanceManager.save(tempInstance, tempMap); + } + } catch (Exception e) { + success = false; + message = e.getMessage().toString(); + } + JSONObject result = new JSONObject(); + result.put("success", success); + result.put("message", message); + result.put("id", qualityMonitoringInstance.getId()); + StrutsResponseUtils.output(result.toString()); + } + /** * 加载上传图片 */ @@ -294,6 +419,18 @@ map.put("data", qualityMonitoringInstance); map.put("showSterNameAndFre", showSterNameAndFre); JSONObject jsonObject = JSONObject.fromObject(map, config); + // 是否录入回收记录、清洗记录、灭菌记录 + QualityMonitoringDefinition qualityMonitoringDefinition = (QualityMonitoringDefinition)qualityMonitoringInstance.getFormDefinition(); + jsonObject.optJSONObject("data").put("recordRecycleInformation", qualityMonitoringDefinition.getRecordRecycleInformation()); + jsonObject.optJSONObject("data").put("recordRinseInformation", qualityMonitoringDefinition.getRecordRinseInformation()); + jsonObject.optJSONObject("data").put("recordSterilizatioInformation", qualityMonitoringDefinition.getRecordSterilizatioInformation()); + // 关联的回收记录和灭菌记录 + JSONObject tiJSON = qualityMonitoringInstanceManager.buildTousseJSON(qualityMonitoringInstance.getScanTousseInstance()); + jsonObject.optJSONObject("data").put("scanTousseInstance", tiJSON); + // 关联的清洗记录及篮筐信息 + JSONObject washRecordJSON = buildTousseJSON(qualityMonitoringInstance.getScanWashAndDisinfectRecord()); + jsonObject.optJSONObject("data").put("scanWashAndDisinfectRecord", washRecordJSON); + String jsonStr = jsonObject.toString(); StrutsParamUtils.getResponse().getWriter().println(jsonStr); @@ -302,6 +439,34 @@ } } + /** + * 返回篮筐及清洗记录信息 + * @param scanWashAndDisinfectRecord + * @return + */ + private JSONObject buildTousseJSON( + WashAndDisinfectRecord washAndDisinfectRecord) { + if(washAndDisinfectRecord == null){ + return new JSONObject(); + } + JSONObject obj = new JSONObject(); + List classifyBaskets = washAndDisinfectRecord.getClassifyBaskets(); + ClassifyBasket classifyBasketObj = new ClassifyBasket(); + if(CollectionUtils.isNotEmpty(classifyBaskets)){ + classifyBasketObj = classifyBaskets.get(0); + } + obj.put("washRecordID", washAndDisinfectRecord.getId() == null ? "" : washAndDisinfectRecord.getId()); + obj.put("operator", washAndDisinfectRecord.getOperator() == null ? "" : washAndDisinfectRecord.getOperator()); // 操作员 + obj.put("washBasketName", classifyBasketObj.getContainerName() == null ? "" : classifyBasketObj.getContainerName()); // 清洗篮筐名称 + obj.put("position", classifyBasketObj.getPosition() == null ? "" : classifyBasketObj.getPosition()); // 位置 + obj.put("washDate", DateTools.getFormatDateStr(washAndDisinfectRecord.getStartDate(), DateTools.COMMON_DATE_ONLY)); // 日期(取清洗开始时间的年月日) + obj.put("disinfectIdentification", washAndDisinfectRecord.getDisinfectIdentification() == null ? "" : washAndDisinfectRecord.getDisinfectIdentification()); // 清洗机名称 + obj.put("disinfectProgram", washAndDisinfectRecord.getDisinfectProgram() == null ? "" : washAndDisinfectRecord.getDisinfectProgram()); // 清洗程序名称 + obj.put("startDate", washAndDisinfectRecord.getStartDateStr() == null ? "" : washAndDisinfectRecord.getStartDateStr()); // 清洗开始时间 + obj.put("endDate", washAndDisinfectRecord.getEndDateStr() == null ? "" : washAndDisinfectRecord.getEndDateStr()); // 清洗结束时间 + return obj; + } + public void checkIsUniqueWithBarcodeAndInspectItem() { String id = StrutsParamUtils.getPraramValue("id", ""); String barcode = StrutsParamUtils.getPraramValue("barcode", ""); @@ -376,6 +541,36 @@ } StrutsResponseUtils.output(result); } + + /** + * 输入或者扫描标识牌/器械包条码后,自动查询该标识牌/器械包条码对应的最新的包实例信息 + */ + public void scanBarcodeForTousseInfo(){ + String barcode = StrutsParamUtils.getPraramValue("barcode", null); + try { + JSONObject json = qualityMonitoringInstanceManager.scanBarcodeForTousseInfo(barcode); + JSONObject jsonObj = JSONUtil.buildJsonObject(true, json); + StrutsResponseUtils.output(jsonObj); + } catch (Exception e) { + JSONObject jsonObj = JSONUtil.buildJsonObject(false, e.getMessage()); + StrutsResponseUtils.output(jsonObj); + } + } + + /** + * 扫描清洗篮筐条码,获取该篮筐当天所有清洗记录 + */ + public void scanBasketBarcodeForWashRecord(){ + String basketBarcode = StrutsParamUtils.getPraramValue("basketBarcode", null); + try { + JSONArray washAndDisinfectRecordInfoJSONs = qualityMonitoringInstanceManager.scanBarcodeForWashRecordInfo(basketBarcode); + JSONObject jsonObj = JSONUtil.buildJsonObject(true, washAndDisinfectRecordInfoJSONs); + StrutsResponseUtils.output(jsonObj); + } catch (Exception e) { + JSONObject jsonObj = JSONUtil.buildJsonObject(false, e.getMessage()); + StrutsResponseUtils.output(jsonObj); + } + } public void iniInfo() { Index: ssts-qualitymon/src/main/java/com/forgon/disinfectsystem/qualitymonitoring/instance/service/QualityMonitoringInstanceManagerImpl.java =================================================================== diff -u -r27539 -r27704 --- ssts-qualitymon/src/main/java/com/forgon/disinfectsystem/qualitymonitoring/instance/service/QualityMonitoringInstanceManagerImpl.java (.../QualityMonitoringInstanceManagerImpl.java) (revision 27539) +++ ssts-qualitymon/src/main/java/com/forgon/disinfectsystem/qualitymonitoring/instance/service/QualityMonitoringInstanceManagerImpl.java (.../QualityMonitoringInstanceManagerImpl.java) (revision 27704) @@ -17,12 +17,12 @@ import org.apache.commons.lang.StringUtils; import com.forgon.Constants; +import com.forgon.databaseadapter.service.DateQueryAdapter; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.model.BarcodeDevice; import com.forgon.directory.model.OrgUnit; import com.forgon.directory.vo.LoginUserData; import com.forgon.disinfectsystem.barcode.service.BarcodeManager; -import com.forgon.disinfectsystem.basedata.becleanitem.service.BeCleanItemManager; import com.forgon.disinfectsystem.basedata.becleanitem.service.ClassifyBasketManager; import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.customform.formdefinition.service.FormDefinitionManager; @@ -37,9 +37,15 @@ import com.forgon.disinfectsystem.entity.customform.formdefinition.FormDefinition; import com.forgon.disinfectsystem.entity.customform.forminstance.FormInstanceItem; import com.forgon.disinfectsystem.entity.customform.forminstance.FormInstanceOptionValue; +import com.forgon.disinfectsystem.entity.idcardinstance.IDCardInstance; import com.forgon.disinfectsystem.entity.qualitymonitoringmanager.qualitymonitoring.QualityMonitoringGoods; import com.forgon.disinfectsystem.entity.qualitymonitoringmanager.qualitymonitoring.QualityMonitoringInstance; +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.disinfectsystem.idcarddefinition.service.IDCardDefinitionManager; +import com.forgon.disinfectsystem.idcardinstance.util.IDCardInstanceUtils; import com.forgon.disinfectsystem.packing.service.PackingManager; import com.forgon.disinfectsystem.recyclingapplication.service.RecyclingApplicationManager; import com.forgon.disinfectsystem.sterilizationmanager.sterilizationrecord.service.SterilizationRecordManager; @@ -49,10 +55,13 @@ import com.forgon.log.model.Log; import com.forgon.log.service.LogManager; import com.forgon.reflect.ReflectUtil; +import com.forgon.tools.SpringBeanManger; import com.forgon.tools.StrutsParamUtils; +import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.BasePoManagerImpl; import com.forgon.tools.string.StringTools; +import com.forgon.tools.util.ForgonDateUtils; import com.forgon.tools.util.SqlUtils; /** @@ -62,8 +71,6 @@ public class QualityMonitoringInstanceManagerImpl extends BasePoManagerImpl implements QualityMonitoringInstanceManager { private ImageFileManager imageFileManager; - private BeCleanItemManager beCleanItemManager; - private ClassifyBasketManager classifyBasketManager; private MaterialDefinitionManager materialDefinitionManager; @@ -83,6 +90,8 @@ private PackingManager packingManager; private LogManager appLogManager; + + private DateQueryAdapter dateQueryAdapter; public void setFormDefinitionManager(FormDefinitionManager formDefinitionManager) { this.formDefinitionManager = formDefinitionManager; @@ -123,17 +132,17 @@ this.imageFileManager = imageFileManager; } - public void setBeCleanItemManager(BeCleanItemManager beCleanItemManager) { - this.beCleanItemManager = beCleanItemManager; - } - public void setClassifyBasketManager(ClassifyBasketManager classifyBasketManager) { this.classifyBasketManager = classifyBasketManager; } public void setAppLogManager(LogManager appLogManager) { this.appLogManager = appLogManager; } + + public void setDateQueryAdapter(DateQueryAdapter dateQueryAdapter) { + this.dateQueryAdapter = dateQueryAdapter; + } @Override public boolean checkIsUniqueWithBarcodeAndInspectItem(String id, @@ -186,6 +195,9 @@ String sterilizerName = requestParams.get("sterilizerName"); //灭菌炉号(针对监测范围为“灭菌炉记录”的) String sterilizerFre = requestParams.get("sterilizerFre"); //炉次(针对监测范围为“灭菌炉记录”的) + String scanTousseInstanceId = requestParams.get("scanTousseInstance_id"); //录回收信息和灭菌信息扫码获取的器械包实例id + String scanWashAndDisinfectRecordId = requestParams.get("scanWashRecord_id"); //录清洗记录时,选择的清洗记录id + try{ //定期监测不合格添加的质量监测 setUnionQualityMonitoringForRoutine(qmInstance, requestParams); @@ -195,7 +207,7 @@ //设置质量监测属性 String positionMsg = setQualityMonitoringInstanceProperty(qmInstance, requestParams, tousseInstanceId, sterilizationID, wrRecordId, - uploadImgIds, srInfo,srDateTime,sterilizerName,sterilizerFre); + uploadImgIds, srInfo,srDateTime,sterilizerName,sterilizerFre, scanTousseInstanceId, scanWashAndDisinfectRecordId); //监测项不是【无】 if(!"0".equals(formDefinitionId)){ if(!DatabaseUtil.isPoIdValid(formDefinitionId)){ @@ -472,7 +484,8 @@ QualityMonitoringInstance qmInstance, Map requestParams, String tousseInstanceId, String sterilizationID, String wrRecordId, String uploadImgIds, - String srInfo,String srDateTime,String sterilizerName,String sterilizerFre) { + String srInfo,String srDateTime,String sterilizerName,String sterilizerFre, + String scanTousseInstanceId, String scanWashAndDisinfectRecordId) { if (StringUtils.isNotBlank(srInfo)) { qmInstance.setSterilizationRecordInfo(srInfo); } @@ -499,6 +512,22 @@ } } } + // 设置录回收记录和灭菌记录时扫码获取的器械包实例 + if (StringUtils.isNotBlank(scanTousseInstanceId)) { + TousseInstance ti = tousseInstanceManager.get(scanTousseInstanceId); + if(ti != null){ + qmInstance.setScanTousseInstance(ti); + } + } + + // 设置录清洗记录时,页面选中的清洗记录 + if (StringUtils.isNotBlank(scanWashAndDisinfectRecordId)) { + WashAndDisinfectRecord wdRecord = (WashAndDisinfectRecord) objectDao.getById(WashAndDisinfectRecord.class.getSimpleName(), scanWashAndDisinfectRecordId); + if(wdRecord != null){ + qmInstance.setScanWashAndDisinfectRecord(wdRecord); + } + } + String positionMsg = ""; // 如果是灭菌录入的器械包实例,根据实例找到包的位置信息 if(StringUtils.isNotBlank(tousseInstanceId) && StringUtils.isNotBlank(sterilizationID)){ @@ -768,4 +797,127 @@ } } + @Override + public JSONObject scanBarcodeForTousseInfo(String barcode) { + if(StringUtils.isEmpty(barcode)){ + throw new RuntimeException("条码不能为空!"); + } + BarcodeDevice barcodeDevice = barcodeManager.getBarcodeByBarcode(barcode); + TousseInstance ti = null; + if(barcodeDevice instanceof IDCardInstance){ + IDCardInstance idCardInstance = (IDCardInstance) barcodeDevice; + ti = IDCardInstanceUtils.getLastOperatedTousseInstance(objectDao, idCardInstance); + if(ti == null){ + throw new RuntimeException("没有找到和标识牌绑定的器械包!"); + } + } else if (barcodeDevice instanceof TousseInstance){ + ti = (TousseInstance) barcodeDevice; + } else { + throw new RuntimeException("该条码不是标识牌/器械包条码,请扫描标识牌/器械包条码"); + } + return buildTousseJSON(ti); + } + + /** + * 根据包实例查询回收记录和灭菌记录 + * @param ti + * @return + */ + @Override + public JSONObject buildTousseJSON(TousseInstance ti){ + if(ti == null){ + return new JSONObject(); + } + + //回收记录 + JSONObject recyclingRecordJSON = new JSONObject(); + RecyclingRecord recyclingRecord = ti.getRecyclingRecord(objectDao); + if(recyclingRecord != null){ + recyclingRecordJSON.put("reUser", recyclingRecord.getRecyclingUser() == null ? "" : recyclingRecord.getRecyclingUser()); // 回收员 + recyclingRecordJSON.put("reDept", recyclingRecord.getDepart() == null ? "" : recyclingRecord.getDepart()); // 回收科室 + recyclingRecordJSON.put("lastUseRecordOperationRoom", ""); // 手术间 + recyclingRecordJSON.put("lastUseRecordCircuitNurse", ""); // 巡回护士 + recyclingRecordJSON.put("reTime", ForgonDateUtils.safelyFormatDate(recyclingRecord.getRecyclingTime(), ForgonDateUtils.SIMPLEDATEFORMAT_YYYYMMDDHHMM, "")); // 回收时间 + } + + //使用记录获取巡回护士和手术间 + UseRecord lastUseRecord = null; + //获取前一个包实例的使用记录 + TousseInstance lastTousseInstance = tousseInstanceManager.get(ti.getLastTousseInstanceId()); + if(lastTousseInstance != null && !lastTousseInstance.isComboTousse()){ + //上一个包实例的使用记录信息显示在回收记录里(不要问我为什么,我也不知道为什么),聚合包没有回收记录。 + lastUseRecord = lastTousseInstance.getUseRecord(objectDao); + } + if(lastUseRecord != null){ + recyclingRecordJSON.put("lastUseRecordCircuitNurse", lastUseRecord.getCircuitNurse() == null ? "" : lastUseRecord.getCircuitNurse()); + recyclingRecordJSON.put("lastUseRecordOperationRoom", lastUseRecord.getOperationRoom() == null ? "" : lastUseRecord.getOperationRoom()); + } + + //灭菌记录 + JSONObject sterilizationRecordJSON = new JSONObject(); + if(ti.getSterilizationRecord_id() != null){ + sterilizationRecordJSON.put("sterilizerName", ti.getSterilizerName() == null ? "" : ti.getSterilizerName()); //灭菌记录_灭菌炉 + sterilizationRecordJSON.put("sterilizationType", ti.getSterilingType() == null ? "" : ti.getSterilingType()); //灭菌记录_灭菌程序 + sterilizationRecordJSON.put("frequency", ti.getSterileFrequency() == null ? "" : ti.getSterileFrequency());//灭菌记录_炉次 + sterilizationRecordJSON.put("startDate", ti.getSterileStartTime() == null ? "" : ti.getSterileStartTime()); //灭菌记录_开始时间 + sterilizationRecordJSON.put("endDate", ti.getSterileEndTime() == null ? "" : ti.getSterileEndTime()); //灭菌记录_结束时间 + } + + JSONObject result = new JSONObject(); + result.put("tousseInstanceId", ti.getId()); + result.put("tousseInstanceBarcode", ti.getBarcode()); + result.put("tousseInstanceName", ti.getTousseName()); + result.put("recyclingRecordJSON", recyclingRecordJSON); + result.put("sterilizationRecordJSON", sterilizationRecordJSON); + + return result; + } + + @Override + public JSONArray scanBarcodeForWashRecordInfo(String basketBarcode) { + if(StringUtils.isEmpty(basketBarcode)){ + throw new RuntimeException("条码不能为空!"); + } + // 获取清洗篮筐 + ClassifyBasket classifyBasket = (ClassifyBasket) objectDao.getByProperty(ClassifyBasket.class.getSimpleName(), + "containerBarcode", basketBarcode); + if(classifyBasket == null){ + throw new RuntimeException("请扫描正确的清洗篮筐条码"); + } + + String nowDateStr = DateTools.getCurrentDayByFormat(DateTools.COMMON_DATE_ONLY); + String sql = String.format("select po, r from %s po left join po.classifyBaskets r " + + "where r.containerBarcode = '%s'" + + "and %s " , + WashAndDisinfectRecord.class.getSimpleName(), basketBarcode, + dateQueryAdapter.dateAreaSql("po.startDate", nowDateStr + " 00:00:00", nowDateStr + " 23:59:59")); + + List list = objectDao.findByHql(sql); + + if(CollectionUtils.isEmpty(list)){ + throw new RuntimeException("该篮筐当天无清洗记录"); + } + + // 返回清洗记录列表 + JSONArray washAndDisinfectRecordArr = new JSONArray(); + for (int i=0; i