Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/ButtJointUseRecordAction.java =================================================================== diff -u -r32570 -r33328 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/ButtJointUseRecordAction.java (.../ButtJointUseRecordAction.java) (revision 32570) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/ButtJointUseRecordAction.java (.../ButtJointUseRecordAction.java) (revision 33328) @@ -21,17 +21,22 @@ import com.forgon.Constants; import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.service.OrgUnitManager; -import com.forgon.disinfectsystem.basedatamanager.supplyroomconfig.service.SupplyRoomConfigManager; import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; import com.forgon.disinfectsystem.datasynchronization.service.DataSynchronizationManager; +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoods; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsInstance; import com.forgon.disinfectsystem.entity.basedatamanager.materialdefinition.MaterialDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.materialinstance.MaterialInstance; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstanceImplantData; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseMaterialErrorDamage; import com.forgon.disinfectsystem.entity.foreigntousseapplication.ForeignTousseApplication; import com.forgon.disinfectsystem.entity.tousseitem.TousseItem; +import com.forgon.disinfectsystem.entity.urgent.UrgentLevel; +import com.forgon.disinfectsystem.entity.useRecord.UseDiposableGoodsItem; import com.forgon.disinfectsystem.entity.useRecord.UseRecord; import com.forgon.disinfectsystem.foreigntousseapplication.service.ForeignTousseApplicationManager; import com.forgon.disinfectsystem.tousse.materialinstance.service.MaterialInstanceManager; @@ -43,6 +48,7 @@ import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.StrutsResponseUtils; import com.forgon.tools.date.DateTools; +import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.json.JSONUtil; import com.forgon.tools.string.StringTools; import com.forgon.treenode.model.THTreeNode; @@ -376,6 +382,197 @@ } /** + * 根据住院号查询使用记录列表 + */ + @SuppressWarnings("unchecked") + public void loadUseRecordsByHospitalNum(){ + String hospitalNum = StrutsParamUtils.getPraramValue("hospitalNum" , ""); + JSONObject result = JSONUtil.buildJsonObject(false); + JSONArray dataArray = new JSONArray(); + try{ + if(StringUtils.isBlank(hospitalNum)){ + JSONUtil.addMessage(result, "住院号不能为空."); + }else{ + //查询条件 + String condition = "where 1=1 and hospitalNum='"+ hospitalNum +"' "; + //根据住院号或诊疗号查询使用记录 + List useRecordList = objectDao.findBySql(UseRecord.class.getSimpleName(), condition); + if (CollectionUtils.isEmpty(useRecordList)){ + JSONUtil.addMessage(result, "没有查找到对应的病人使用记录"); + StrutsResponseUtils.output(result); + return; + } + //返回数据 + dataArray = JSONUtil.toJSONArrayWithExclude(useRecordList, new String[]{}); + JSONUtil.addProperty(result, JSONUtil.JSON_KEY_SUCCESS, true); + JSONUtil.addProperty(result, JSONUtil.JSON_KEY_ROWS,dataArray); + } + } + catch(Exception e){ + JSONUtil.addMessage(result, "调用接口失败!"+e.getMessage()); + logger.info("调用接口失败!loadUseRecordsByHospitalNum"+e.getMessage()); + e.printStackTrace(); + } + StrutsResponseUtils.output(result); + } + + /** + * 根据住院号/诊疗号查询病人使用记录信息 + * 使用记录的器械包信息 + * @param patientNum + * @param numType + */ + @SuppressWarnings("unchecked") + public void loadUseRecordAndTousseInstanceInfosByUseRecordID(){ + String useRecordID = StrutsParamUtils.getPraramValue("useRecordID" , ""); + JSONObject result = JSONUtil.buildJsonObject(false); + try{ + if(!DatabaseUtil.isPoIdValid(useRecordID)){ + JSONUtil.addMessage(result, "住院号无效."); + }else{ + //根据ID查询使用记录 + UseRecord useRecord = (UseRecord) objectDao.getById(UseRecord.class.getSimpleName(), useRecordID); + if (useRecord == null){ + JSONUtil.addMessage(result, "没有查找到对应的病人使用记录"); + StrutsResponseUtils.output(result); + return; + } + //1、病人使用记录 + JSONObject data = JSONObject.fromObject(useRecord); + //2、获得病人使用记录的器械包实例信息 + List tousseInstanceList = useRecord.getTousseInstanceList(objectDao); + JSONArray array = new JSONArray(); + //将使用记录的包实例集合转换成jsonArray对象,如果有启用聚合包的子包修改数量功能则,则需要将子包的信息也显示出来 + JSONArray tousseInstanceJSONArray = getTousseInstanceJSONArray(tousseInstanceList, useRecord.getId()); + if(tousseInstanceJSONArray != null && tousseInstanceJSONArray.size() > 0){ + array.addAll(tousseInstanceJSONArray); + } + + //3.使用记录登记的一次性物品 + if(useRecord != null){ + List diList = useRecord.getDiposableGoodsItems(); + if(CollectionUtils.isNotEmpty(diList)){ + for (UseDiposableGoodsItem di : diList) { + JSONObject obj = new JSONObject(); + obj.put("id", di.getId()); + obj.put("barcode", di.getBarcode()); + obj.put("amount", di.getAmount()); + obj.put("tousseDefinitionName", di.getName()); + obj.put("showTousseName", di.getName()); + obj.put("batchNo", di.getBatchNo()); + obj.put("packageType", ""); + obj.put("validUntil", di.getValidUntil()); + obj.put("tousseType", DisposableGoods.TYPE_NAME); + array.add(obj); + } + } + } + + //4.使用记录登记的高值耗材(非一次性物品的高值耗材) + List expensiveGoodsInstanceList = + objectDao.findBySql(ExpensiveGoodsInstance.class.getSimpleName(), " where useRecord.id=" + useRecord.getId()); + if(CollectionUtils.isNotEmpty(expensiveGoodsInstanceList)){ + for (ExpensiveGoodsInstance ei : expensiveGoodsInstanceList) { + JSONObject obj = new JSONObject(); + obj.put("id", ei.getId()); + obj.put("barcode", ei.getBarcode()); + obj.put("amount", 1); + obj.put("tousseDefinitionName", ei.getShowName()); + obj.put("showTousseName", ei.getShowName()); + obj.put("validUntil", ei.getExpDateStr()); + obj.put("tousseType", ExpensiveGoods.TYPE_NAME); + array.add(obj); + } + } + data.put("useRecordItems", array); + JSONUtil.addProperty(result, JSONUtil.JSON_KEY_SUCCESS, true); + JSONUtil.addProperty(result, JSONUtil.JSON_KEY_ROWS,data); + } + } + catch(Exception e){ + JSONUtil.addMessage(result, "调用接口失败!"+e.getMessage()); + logger.info("调用接口失败!loadUseRecordAndTousseInstanceInfosByUseRecordID"+e.getMessage()); + e.printStackTrace(); + } + StrutsResponseUtils.output(result); + } + + /** + * 将使用记录的包实例集合转换成jsonArray对象,如果有启用聚合包的子包修改数量功能则,则需要将子包的信息也显示出来 + */ + private JSONArray getTousseInstanceJSONArray(List tousseInstances, Long useRecordId) { + JSONArray array = new JSONArray(); + if (tousseInstances != null) { + for (TousseInstance ti : tousseInstances) { + if (ti != null) { + ti.setTousseMaterialErrorDamageList(ti.getTousseMaterialErrorDamageList(objectDao, TousseMaterialErrorDamage.LINKTYPE_USERECORD, null)); + String validUntilStr = ti.getValidUntilStr(Constants.SIMPLEDATEFORMAT_YYYYMMDD); + TousseDefinition td = ti.getTousseDefinition(); + String tousseDefinitionName = ""; + + String tousseType = ""; + String includeImplant = ""; + String isRecycling = TousseDefinition.STR_NO; + String isConvertApplyGoods = TousseDefinition.STR_NO; + if (td != null) { + tousseType = td.getTousseType(); + tousseDefinitionName = td.getName(); + includeImplant = td.getIncludeImplantStr(); + + isRecycling = td.getIsRecycling(); + isConvertApplyGoods = td.getIsConvertApplyGoods(); + } + JSONObject obj = new JSONObject(); + obj.put("id", ti.getId()); + obj.put("barcode", ti.getBarcode()); + obj.put("amount", 1); + obj.put("tousseDefinitionName", tousseDefinitionName); + obj.put("showTousseName", ti.getShowTousseName()); + obj.put("packageType", ti.getPackageType()); + obj.put("validUntil", validUntilStr); + obj.put("status", ti.getStatus()); + obj.put("tousseType", tousseType); + obj.put("foreignTousseApp_id", ti.getForeignTousseApp_id()); + obj.put("isUrgentForUseRecord", StringTools.defaultString(ti.getIsUrgentForUseRecord())); + obj.put("includeImplant", includeImplant); + obj.put("actualUsed", StringTools.defaultIfBlank(ti.getActualUsed(),Constants.STR_YES)); + //是否回收 + obj.put("isRecycling", isRecycling); + //是否转换申请单 + obj.put("isConvertApplyGoods", isConvertApplyGoods); + obj.put("tousseMaterialErrorDamageJsonData", ti.getTousseMaterialErrorDamageJsonData()); + //回收状态 + obj.put("recyclingStatus", ti.getRecyclingStatus()); + //录使用记录时的加急信息(非录使用记录前的加急信息) + UrgentLevel urgentLevelForUseRecord = ti.getUrgentLevelForUseRecord(); + if(urgentLevelForUseRecord != null){ + obj.put("urgentLevelIdForUseRecord", urgentLevelForUseRecord.getId()); + obj.put("urgentLevelForUseRecord", JSONObject.fromObject(urgentLevelForUseRecord)); + } + array.add(obj); + + //需要循环该使用记录的所有器械包,如果发现有聚合包,且配置允许修改子包修改数量时,需要将子包的使用情况也输出给前端 + // 判断包实例是否为聚合包 + if(ti.isComboTousse()){ + //判断有无开启聚合包内的子包修改使用数量的配置项 + boolean comboTousseRegistUseRecordCanModifySubTousseAmount = + CssdUtils.getSystemSetConfigByNameBool("comboTousseRegistUseRecordCanModifySubTousseAmount", false); + //如果开启了此配置项,则除了加载此聚合包实例外还需再加载聚合包内的子包实例 + if(comboTousseRegistUseRecordCanModifySubTousseAmount){ + //如果存在使用记录id,则查出每一个子包实例对应已使用数量,否则已使用数量都为0 + JSONArray result = useRecordManager.loadSubTousseUseRecordOfComboTousse(ti , useRecordId); + if(result != null && result.size() > 0){ + array.addAll(result); + } + } + } + } + } + } + return array; + } + + /** * 将使用记录的信息转为json对象 * @param useRecord * @return