Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordToJson.java =================================================================== diff -u -r17991 -r25697 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordToJson.java (.../UseRecordToJson.java) (revision 17991) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordToJson.java (.../UseRecordToJson.java) (revision 25697) @@ -46,7 +46,9 @@ public boolean apply(Object source, String name, Object value) { List inCludesList = Arrays.asList(new String[] { "id", "treatmentNum", "hospitalNum", "patientName", "patientIDCard", - "patientAge", "doctorName", "operation", "editable","operationRoom","circuitNurse","washHandNurse","patientArea"}); + "patientAge", "doctorName", "operation", "editable","operationRoom", + "circuitNurse","washHandNurse","patientArea","patientSex","surgeon", + "specialInfection","visitId","bedNumber","remark"}); if (inCludesList.contains(name)) { return false; } Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordActionBase.java =================================================================== diff -u -r25307 -r25697 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordActionBase.java (.../UseRecordActionBase.java) (revision 25307) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordActionBase.java (.../UseRecordActionBase.java) (revision 25697) @@ -190,212 +190,4 @@ StrutsResponseUtils.output(result); } - /** - * - * @param useRecord - * @param items - * @param tousseInstanceMaterialErrorDamageItems 包实例的材料丢失报损数据,格式如下: - * [ - * {id:1,errorRemark:"丢失原因说明",damageRemark:"报损原因说明",errorData:[{materialId:"材料id1",errorAmount:1},{materialId:"材料id2",errorAmount:0},...{materialId:"材料id3",errorAmount:1}}],damageData:[{materialId:"材料id1",errorAmount:1},{materialId:"材料id2",errorAmount:0},...{materialId:"材料id3",errorAmount:1}}]}, - * {id:2,errorRemark:"丢失原因说明",damageRemark:"报损原因说明",errorData:[{materialId:"材料id1",errorAmount:1},{materialId:"材料id2",errorAmount:0},...{materialId:"材料id3",errorAmount:1}}],damageData:[{materialId:"材料id1",errorAmount:1},{materialId:"材料id2",errorAmount:0},...{materialId:"材料id3",errorAmount:1}}]} - * ] - */ - protected void setUseRecordItemsFromParams(UseRecord useRecord, String items,String tousseInstanceMaterialErrorDamageItems) { - Date now = new Date(); - JSONArray jsonArray = null; - //解决丢失报损数据 - if(StringUtils.isNotBlank(tousseInstanceMaterialErrorDamageItems)){ - try{ - jsonArray = JSONArray.fromObject(tousseInstanceMaterialErrorDamageItems); - }catch(Exception e){ - e.printStackTrace(); - } - } - - // 使用记录录入的包实例列表 - List tousseInstanceList = new LinkedList(); - // 使用记录录入的一次性物品列表 - List diposableGoodsItemList = new LinkedList(); - // 使用记录录入的聚合包内子包物品列表 - List subComboTousseUseRecordList = new LinkedList(); - // 使用记录录入的高值耗材(非一次性物品的高值耗材)物品列表 - List expensiveGoodsInstanceList = new LinkedList(); - - useRecord.setTousseInstanceList(tousseInstanceList); - useRecord.setDiposableGoodsItems(diposableGoodsItemList); - useRecord.setSubComboTousseUseRecordList(subComboTousseUseRecordList); - useRecord.setExpensiveGoodsInstanceList(expensiveGoodsInstanceList); - - JSONArray itemsArray = null; - int size = 0; - if(StringUtils.isNotBlank(items)){ - itemsArray = JSONArray.fromObject(items); - size = itemsArray.size(); - } - BarcodeDevice barcodeDevice = null; - - //器械包实例位于使用记录的顺序号 - int tousseInstanceUseRecordSortNumber = 0; - //高值耗材实例位于使用记录的顺序号 - int expensiveGoodsInstanceUseRecordSortNumber = 0; - for (int i = 0; i < size; ++i) { - JSONObject obj = itemsArray.optJSONObject(i); - if(obj == null){ - throw new RuntimeException("器械包参数错误!"); - } - TousseInstance tousseInstance = null; - //参数里有id,优先用id,否则才用其它(可以是器械包实例id,一次性物品使用明细id或高值耗材实例id) - Long itemId = JSONUtil.optLong(obj,"id",null); - if(DatabaseUtil.isPoIdValid(itemId)){ - tousseInstance = tousseInstanceManager.get(itemId); - } - if(tousseInstance != null){ - tousseInstanceUseRecordSortNumber++; - //包实例id(非聚合包内的子包id都有值,如果没有值一般为聚合包内的子包) - if(!DatabaseUtil.isPoIdValid(tousseInstance.getComboTousseInstanceId())){ - tousseInstance.setIsUrgentForUseRecord(JSONUtil.optString(obj, "isUrgentForUseRecord", Constants.STR_NO)); - tousseInstance.setActualUsed(JSONUtil.optString(obj, "actualUsed", Constants.STR_YES)); - //设置使用记录顺序号 - tousseInstance.setUseRecordSortNumber(tousseInstanceUseRecordSortNumber); - - if(jsonArray != null && jsonArray.size() > 0){ - for (int j = 0; j < jsonArray.size(); j++) { - JSONObject jsonObject = jsonArray.optJSONObject(j); - if(jsonObject.optLong("id") == itemId.longValue()){ - if(StringUtils.isNotBlank(jsonObject.optString("errorRemark"))){ - tousseInstance.setErrorRemark(jsonObject.optString("errorRemark")); - } - if(StringUtils.isNotBlank(jsonObject.optString("damageRemark"))){ - tousseInstance.setDamageRemark(jsonObject.optString("damageRemark")); - } - - List tousseMaterialErrorDamageList = new ArrayList(); - //该包实例的丢失数据 - JSONArray materialErrorDamageDataListForTousseInstance = jsonObject.optJSONArray("errorData"); - if(materialErrorDamageDataListForTousseInstance != null && materialErrorDamageDataListForTousseInstance.size() > 0){ - for (int k = 0; k < materialErrorDamageDataListForTousseInstance.size(); k++) { - JSONObject materialErrorDamage = materialErrorDamageDataListForTousseInstance.optJSONObject(k); - TousseMaterialErrorDamage tousseMaterialErrorDamage = new TousseMaterialErrorDamage(); - tousseMaterialErrorDamage.setTousseInstanceId(itemId); - tousseMaterialErrorDamage.setAmount(materialErrorDamage.optInt("errorAmount")); - tousseMaterialErrorDamage.setLinkType(TousseMaterialErrorDamage.LINKTYPE_USERECORD); - tousseMaterialErrorDamage.setMaterialDefinitionId(materialErrorDamage.optLong("materialId")); - tousseMaterialErrorDamage.setOperationTime(now); - tousseMaterialErrorDamage.setOperator(AcegiHelper.getLoginUser().getUserFullName()); - tousseMaterialErrorDamage.setType(MaterialErrorDamageDetail.TYPE_ERROR); - - tousseMaterialErrorDamageList.add(tousseMaterialErrorDamage); - } - } - - //该包实例的报损数据 - materialErrorDamageDataListForTousseInstance = jsonObject.optJSONArray("damageData"); - if(materialErrorDamageDataListForTousseInstance != null && materialErrorDamageDataListForTousseInstance.size() > 0){ - for (int k = 0; k < materialErrorDamageDataListForTousseInstance.size(); k++) { - JSONObject materialErrorDamage = materialErrorDamageDataListForTousseInstance.optJSONObject(k); - TousseMaterialErrorDamage tousseMaterialErrorDamage = new TousseMaterialErrorDamage(); - tousseMaterialErrorDamage.setTousseInstanceId(itemId); - tousseMaterialErrorDamage.setAmount(materialErrorDamage.optInt("errorAmount")); - tousseMaterialErrorDamage.setLinkType(TousseMaterialErrorDamage.LINKTYPE_USERECORD); - tousseMaterialErrorDamage.setMaterialDefinitionId(materialErrorDamage.optLong("materialId")); - tousseMaterialErrorDamage.setOperationTime(now); - tousseMaterialErrorDamage.setOperator(AcegiHelper.getLoginUser().getUserFullName()); - tousseMaterialErrorDamage.setType(MaterialErrorDamageDetail.TYPE_DAMAGE); - - tousseMaterialErrorDamageList.add(tousseMaterialErrorDamage); - } - } - tousseInstance.setTousseMaterialErrorDamageList(tousseMaterialErrorDamageList); - break; - } - } - } - tousseInstanceList.add(tousseInstance); - }else{ - Integer amount = JSONUtil.optInteger(obj, "amount" , null); - Integer usedAmount = JSONUtil.optInteger(obj ,"usedAmount" , null); - Long comboTousseInstanceId = JSONUtil.optLong(obj ,"comboTousseInstanceId" , null); - Long subTousseDefinitionId = JSONUtil.optLong(obj ,"subTousseDefinitionId" , null); - String tousseDefinitionName = JSONUtil.optString(obj ,"tousseDefinitionName" , null); - //内存对象,非持久化对象 - SubComboTousseUseRecord subComboTousseUseRecordInMemory = new SubComboTousseUseRecord(); - subComboTousseUseRecordInMemory.setComboTousseInstanceId(comboTousseInstanceId); - subComboTousseUseRecordInMemory.setSubTousseDefinitionId(subTousseDefinitionId); - subComboTousseUseRecordInMemory.setIncludeAmountByComboTousse(amount); - subComboTousseUseRecordInMemory.setUsedAmount(usedAmount); - subComboTousseUseRecordInMemory.setTousseName(tousseDefinitionName); - subComboTousseUseRecordInMemory.setUseRecordId(useRecord.getId()); - subComboTousseUseRecordList.add(subComboTousseUseRecordInMemory); - } - }else{ - String type = obj.optString("tousseType"); - String barcode = JSONUtil.optString(obj,"barcode",""); - if(StringUtils.isBlank(barcode)){ - throw new RuntimeException("barcode参数不能为空!"); - } - Object bd = null; - if(BarcodeUtils.isDisposableGoodsBarcode(barcode)){ - bd = barcodeManager.getBarcodeEntityByPrefixBarcode(barcode); - }else{ - bd = barcodeManager - .getBarcodeByBarcode(barcode); - barcodeDevice = (BarcodeDevice)bd; - } - if(bd == null && barcodeDevice == null){ - throw new RuntimeException("未找到条码数据!"); - } - if(DisposableGoods.TYPE_NAME.equals(type)){ - //Long itemId = JSONUtil.optLong(obj,"id",null); - UseDiposableGoodsItem di = new UseDiposableGoodsItem(); - di.setName(obj.optString("showTousseName")); - di.setAmount(obj.optInt("amount")); - - if(bd != null && bd instanceof DisposableGoods){ - di.setFixBarcode(barcode); - di.setDisposableGoodsId(((DisposableGoods)bd).getId()); - }else if(barcodeDevice != null && barcodeDevice instanceof DisposableGoodsBatch || barcodeDevice instanceof ExpensiveDisposablegoods){ - di.setId(itemId); - di.setBarcode(barcode); - di.setBatchNo(obj.optString("batchNo")); - di.setValidUntil(obj.optString("validUntil")); - if(barcodeDevice instanceof DisposableGoodsBatch){ - di.setDisposableGoodsId(((DisposableGoodsBatch)barcodeDevice).getDiposableGoods().getId()); - }else if(barcodeDevice instanceof ExpensiveDisposablegoods){ - di.setDisposableGoodsId(((ExpensiveDisposablegoods)barcodeDevice).getDisposableGoodsID()); - } - }else{ - //通常不会有这种情况,此处暂不处理,也不丢弃此数据 - logger.debug("系统无该一次性物品的条码" + barcode + "相关的物品"); - continue; - } - diposableGoodsItemList.add(di); - }else if(ExpensiveGoods.TYPE_NAME.equals(type)){ - expensiveGoodsInstanceUseRecordSortNumber++; - //高值耗材实例id - //Long itemId = JSONUtil.optLong(obj,"id",null); - if(DatabaseUtil.isPoIdValid(itemId)){ - ExpensiveGoodsInstance orginalExpensiveGoodsInstance = - (ExpensiveGoodsInstance)objectDao.getByProperty(ExpensiveGoodsInstance.class.getSimpleName(), "id", itemId); - ExpensiveGoodsInstance expensiveGoodsInstance = new ExpensiveGoodsInstance(); - expensiveGoodsInstance.setId(itemId); - expensiveGoodsInstance.setExpensiveGoods(orginalExpensiveGoodsInstance.getExpensiveGoods()); - expensiveGoodsInstance.setBarcode(barcode); - expensiveGoodsInstance.setInvoicePlanId(orginalExpensiveGoodsInstance.getInvoicePlanId()); - //设置使用记录顺序号 - expensiveGoodsInstance.setUseRecordSortNumber(expensiveGoodsInstanceUseRecordSortNumber); - - expensiveGoodsInstanceList.add(expensiveGoodsInstance); - } - - }else{ - logger.debug("系统不支持该物品类型" + type + "录入使用记录"); - } - } - } - //对使用记录的一次性物品进行排序(按固定条码,优先将有批次号的排到前面,固定条码放到后面处理) - if(CollectionUtils.isNotEmpty(diposableGoodsItemList)){ - Collections.sort(diposableGoodsItemList); - } - } - } Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManager.java =================================================================== diff -u -r25307 -r25697 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManager.java (.../UseRecordManager.java) (revision 25307) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManager.java (.../UseRecordManager.java) (revision 25697) @@ -34,11 +34,11 @@ public UseRecord getUseRecordById(Long id); /** - * 获取科室24小时内的使用记录 - * @param departCoding + * 获取科室最近一天(即最近24小时内)的使用记录(仅pda的使用记录列表请求调用) + * @param departCoding 科室编码 * @return */ - public List getUseRecordList(String departCoding); + public List getLastOneDayUseRecordList(String departCoding); /** * 根据使用记录id查询器械材料使用记录 Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/util/UseRecordUtil.java =================================================================== diff -u --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/util/UseRecordUtil.java (revision 0) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/util/UseRecordUtil.java (revision 25697) @@ -0,0 +1,292 @@ +package com.forgon.disinfectsystem.useRecord.util; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.Date; +import java.util.LinkedList; +import java.util.List; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; +import org.apache.log4j.Logger; + +import com.forgon.Constants; +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.directory.model.BarcodeDevice; +import com.forgon.disinfectsystem.barcode.service.BarcodeManager; +import com.forgon.disinfectsystem.barcode.util.BarcodeUtils; +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; +import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoodsBatch; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveDisposablegoods; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoods; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsInstance; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.SubComboTousseUseRecord; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseMaterialErrorDamage; +import com.forgon.disinfectsystem.entity.materialerrordamage.MaterialErrorDamageDetail; +import com.forgon.disinfectsystem.entity.useRecord.UseDiposableGoodsItem; +import com.forgon.disinfectsystem.entity.useRecord.UseRecord; +import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.json.JSONUtil; +import com.google.gson.Gson; + +/** + * 使用记录工具类 + * @author shuyongfu + * @since 2019-01-24 + * + */ +public class UseRecordUtil { + + private static Logger logger = Logger.getLogger(UseRecordUtil.class); + /** + * + * @param useRecord 使用记录对象 + * @param items + * [{id:1,barcode:"丢失原因说明",actualUsed:"是",isUrgentForUseRecord:"否",amount:1,usedAmount:1}] + * id:可以是器械包实例id,一次性物品使用明细id或高值耗材实例id + * barcode:条码(器械包、一次性物品固定条码、一次性物品批次条码、高值耗材(两种)实例条码) + * actualUsed:是否真正使用,只有器械包才有这个"是"、"否"可选。为"否"时则该物品无条件转换申请单、为"是"时根据包定义的"是否转换申请物品"字段值决定是否转换 + * isUrgentForUseRecord:是否加急,如果为"是"则转换申请单的申请项的加急数量加1 + * amount:数量(器械包、高值耗材数量都为1、一性性物品的数量可以进行修改) + * usedAmount:使用数量(只用于聚合包内的子包的使用数量) + * @param tousseInstanceMaterialErrorDamageItems 包实例的材料丢失报损数据,格式如下: + * [ + * {id:1,errorRemark:"丢失原因说明",damageRemark:"报损原因说明",errorData:[{materialId:"材料id1",errorAmount:1},{materialId:"材料id2",errorAmount:0},...{materialId:"材料id3",errorAmount:1}}],damageData:[{materialId:"材料id1",errorAmount:1},{materialId:"材料id2",errorAmount:0},...{materialId:"材料id3",errorAmount:1}}]}, + * {id:2,errorRemark:"丢失原因说明",damageRemark:"报损原因说明",errorData:[{materialId:"材料id1",errorAmount:1},{materialId:"材料id2",errorAmount:0},...{materialId:"材料id3",errorAmount:1}}],damageData:[{materialId:"材料id1",errorAmount:1},{materialId:"材料id2",errorAmount:0},...{materialId:"材料id3",errorAmount:1}}]} + * ] + * @param tousseInstanceManager 包实例manager的bean + * @param barcodeManager 条码manager的bean + * @param objectDao dao的bean + */ + public static void setUseRecordItemsFromParams(UseRecord useRecord, String items, + String tousseInstanceMaterialErrorDamageItems,TousseInstanceManager tousseInstanceManager, + BarcodeManager barcodeManager,ObjectDao objectDao) { + Date now = new Date(); + JSONArray materialErrorDamageJsonArray = null; + //解决丢失报损数据 + if(StringUtils.isNotBlank(tousseInstanceMaterialErrorDamageItems)){ + try{ + materialErrorDamageJsonArray = JSONArray.fromObject(tousseInstanceMaterialErrorDamageItems); + }catch(Exception e){ + e.printStackTrace(); + } + } + + // 使用记录录入的包实例列表 + List tousseInstanceList = new LinkedList(); + // 使用记录录入的一次性物品列表 + List diposableGoodsItemList = new LinkedList(); + // 使用记录录入的聚合包内子包物品列表 + List subComboTousseUseRecordList = new LinkedList(); + // 使用记录录入的高值耗材(非一次性物品的高值耗材)物品列表 + List expensiveGoodsInstanceList = new LinkedList(); + + useRecord.setTousseInstanceList(tousseInstanceList); + useRecord.setDiposableGoodsItems(diposableGoodsItemList); + useRecord.setSubComboTousseUseRecordList(subComboTousseUseRecordList); + useRecord.setExpensiveGoodsInstanceList(expensiveGoodsInstanceList); + + JSONArray itemsArray = null; + int size = 0; + if(StringUtils.isNotBlank(items)){ + itemsArray = JSONArray.fromObject(items); + size = itemsArray.size(); + } + BarcodeDevice barcodeDevice = null; + + //器械包实例位于使用记录的顺序号 + int tousseInstanceUseRecordSortNumber = 0; + //高值耗材实例位于使用记录的顺序号 + int expensiveGoodsInstanceUseRecordSortNumber = 0; + for (int i = 0; i < size; ++i) { + JSONObject obj = itemsArray.optJSONObject(i); + if(obj == null){ + throw new RuntimeException("器械包参数错误!"); + } + + //根据条码判断是否为器械包实例 + String barcode = JSONUtil.optString(obj,"barcode",""); + if(StringUtils.isBlank(barcode)){ + throw new RuntimeException("barcode参数不能为空!"); + } + Object bd = null; + if(BarcodeUtils.isDisposableGoodsBarcode(barcode)){ + bd = barcodeManager.getBarcodeEntityByPrefixBarcode(barcode); + }else{ + bd = barcodeManager + .getBarcodeByBarcode(barcode); + barcodeDevice = (BarcodeDevice)bd; + } + if(bd == null && barcodeDevice == null){ + throw new RuntimeException("未找到条码数据!"); + } + + TousseInstance tousseInstance = null; + if(bd instanceof TousseInstance){ + tousseInstance = (TousseInstance)bd; + } + //可以是器械包实例id,一次性物品使用明细id或高值耗材实例id + Long itemId = JSONUtil.optLong(obj,"id",null); + if(tousseInstance != null){ + tousseInstanceUseRecordSortNumber++; + //包实例id(非聚合包内的子包id都有值,如果没有值一般为聚合包内的子包) + if(!DatabaseUtil.isPoIdValid(tousseInstance.getComboTousseInstanceId())){ + tousseInstance.setIsUrgentForUseRecord(JSONUtil.optString(obj, "isUrgentForUseRecord", Constants.STR_NO)); + tousseInstance.setActualUsed(JSONUtil.optString(obj, "actualUsed", Constants.STR_YES)); + //设置使用记录顺序号 + tousseInstance.setUseRecordSortNumber(tousseInstanceUseRecordSortNumber); + + if(materialErrorDamageJsonArray != null && materialErrorDamageJsonArray.size() > 0){ + for (int j = 0; j < materialErrorDamageJsonArray.size(); j++) { + JSONObject jsonObject = materialErrorDamageJsonArray.optJSONObject(j); + if(jsonObject.optLong("id") == itemId.longValue()){ + if(StringUtils.isNotBlank(jsonObject.optString("errorRemark"))){ + tousseInstance.setErrorRemark(jsonObject.optString("errorRemark")); + } + if(StringUtils.isNotBlank(jsonObject.optString("damageRemark"))){ + tousseInstance.setDamageRemark(jsonObject.optString("damageRemark")); + } + + List tousseMaterialErrorDamageList = new ArrayList(); + //该包实例的丢失数据 + JSONArray materialErrorDamageDataListForTousseInstance = jsonObject.optJSONArray("errorData"); + if(materialErrorDamageDataListForTousseInstance != null && materialErrorDamageDataListForTousseInstance.size() > 0){ + for (int k = 0; k < materialErrorDamageDataListForTousseInstance.size(); k++) { + JSONObject materialErrorDamage = materialErrorDamageDataListForTousseInstance.optJSONObject(k); + TousseMaterialErrorDamage tousseMaterialErrorDamage = new TousseMaterialErrorDamage(); + tousseMaterialErrorDamage.setTousseInstanceId(itemId); + tousseMaterialErrorDamage.setAmount(materialErrorDamage.optInt("errorAmount")); + tousseMaterialErrorDamage.setLinkType(TousseMaterialErrorDamage.LINKTYPE_USERECORD); + tousseMaterialErrorDamage.setMaterialDefinitionId(materialErrorDamage.optLong("materialId")); + tousseMaterialErrorDamage.setOperationTime(now); + tousseMaterialErrorDamage.setOperator(AcegiHelper.getLoginUser().getUserFullName()); + tousseMaterialErrorDamage.setType(MaterialErrorDamageDetail.TYPE_ERROR); + + tousseMaterialErrorDamageList.add(tousseMaterialErrorDamage); + } + } + + //该包实例的报损数据 + materialErrorDamageDataListForTousseInstance = jsonObject.optJSONArray("damageData"); + if(materialErrorDamageDataListForTousseInstance != null && materialErrorDamageDataListForTousseInstance.size() > 0){ + for (int k = 0; k < materialErrorDamageDataListForTousseInstance.size(); k++) { + JSONObject materialErrorDamage = materialErrorDamageDataListForTousseInstance.optJSONObject(k); + TousseMaterialErrorDamage tousseMaterialErrorDamage = new TousseMaterialErrorDamage(); + tousseMaterialErrorDamage.setTousseInstanceId(itemId); + tousseMaterialErrorDamage.setAmount(materialErrorDamage.optInt("errorAmount")); + tousseMaterialErrorDamage.setLinkType(TousseMaterialErrorDamage.LINKTYPE_USERECORD); + tousseMaterialErrorDamage.setMaterialDefinitionId(materialErrorDamage.optLong("materialId")); + tousseMaterialErrorDamage.setOperationTime(now); + tousseMaterialErrorDamage.setOperator(AcegiHelper.getLoginUser().getUserFullName()); + tousseMaterialErrorDamage.setType(MaterialErrorDamageDetail.TYPE_DAMAGE); + + tousseMaterialErrorDamageList.add(tousseMaterialErrorDamage); + } + } + tousseInstance.setTousseMaterialErrorDamageList(tousseMaterialErrorDamageList); + break; + } + } + } + tousseInstanceList.add(tousseInstance); + }else{ + Integer amount = JSONUtil.optInteger(obj, "amount" , null); + Integer usedAmount = JSONUtil.optInteger(obj ,"usedAmount" , null); + Long comboTousseInstanceId = JSONUtil.optLong(obj ,"comboTousseInstanceId" , null); + Long subTousseDefinitionId = JSONUtil.optLong(obj ,"subTousseDefinitionId" , null); + String tousseDefinitionName = JSONUtil.optString(obj ,"tousseDefinitionName" , null); + //内存对象,非持久化对象 + SubComboTousseUseRecord subComboTousseUseRecordInMemory = new SubComboTousseUseRecord(); + subComboTousseUseRecordInMemory.setComboTousseInstanceId(comboTousseInstanceId); + subComboTousseUseRecordInMemory.setSubTousseDefinitionId(subTousseDefinitionId); + subComboTousseUseRecordInMemory.setIncludeAmountByComboTousse(amount); + subComboTousseUseRecordInMemory.setUsedAmount(usedAmount); + subComboTousseUseRecordInMemory.setTousseName(tousseDefinitionName); + subComboTousseUseRecordInMemory.setUseRecordId(useRecord.getId()); + subComboTousseUseRecordList.add(subComboTousseUseRecordInMemory); + } + }else{ + //String type = obj.optString("tousseType"); + if(bd instanceof DisposableGoodsBatch){ + DisposableGoodsBatch disposableGoodsBatch = (DisposableGoodsBatch) bd; + DisposableGoods disposableGoods = disposableGoodsBatch.getDiposableGoods(); + UseDiposableGoodsItem di = new UseDiposableGoodsItem(); + di.setName(disposableGoods.getShowName()); + di.setAmount(obj.optInt("amount")); + di.setId(itemId); + di.setBarcode(barcode); + di.setBatchNo(disposableGoodsBatch.getBatchNumber()); + di.setValidUntil(disposableGoodsBatch.getExpDateStr()); + di.setDisposableGoodsId(disposableGoods.getId()); + diposableGoodsItemList.add(di); + }else if(bd instanceof DisposableGoods){ + DisposableGoods disposableGoods = (DisposableGoods) bd; + UseDiposableGoodsItem di = new UseDiposableGoodsItem(); + di.setName(disposableGoods.getShowName()); + di.setAmount(obj.optInt("amount")); + di.setFixBarcode(barcode); + di.setDisposableGoodsId(disposableGoods.getId()); + diposableGoodsItemList.add(di); + }else if(bd instanceof ExpensiveDisposablegoods){ + ExpensiveDisposablegoods expensiveDisposablegoods = (ExpensiveDisposablegoods) bd; + DisposableGoods disposableGoods = (DisposableGoods)objectDao.getById(DisposableGoods.class.getSimpleName(), expensiveDisposablegoods.getDisposableGoodsID()); + DisposableGoodsBatch disposableGoodsBatch = (DisposableGoodsBatch)objectDao.getById(DisposableGoodsBatch.class.getSimpleName(), expensiveDisposablegoods.getDisposableGoodsBatchID()); + UseDiposableGoodsItem di = new UseDiposableGoodsItem(); + di.setName(disposableGoods.getShowName()); + di.setAmount(obj.optInt("amount")); + di.setId(itemId); + di.setBarcode(barcode); + di.setBatchNo(disposableGoodsBatch.getBatchNumber()); + di.setValidUntil(disposableGoodsBatch.getExpDateStr()); + di.setDisposableGoodsId(expensiveDisposablegoods.getDisposableGoodsID()); + diposableGoodsItemList.add(di); + }else if(bd instanceof ExpensiveGoodsInstance){ + expensiveGoodsInstanceUseRecordSortNumber++; + //高值耗材实例id + //Long itemId = JSONUtil.optLong(obj,"id",null); + if(DatabaseUtil.isPoIdValid(itemId)){ + ExpensiveGoodsInstance orginalExpensiveGoodsInstance = + (ExpensiveGoodsInstance)objectDao.getByProperty(ExpensiveGoodsInstance.class.getSimpleName(), "id", itemId); + ExpensiveGoodsInstance expensiveGoodsInstance = new ExpensiveGoodsInstance(); + expensiveGoodsInstance.setId(itemId); + expensiveGoodsInstance.setExpensiveGoods(orginalExpensiveGoodsInstance.getExpensiveGoods()); + expensiveGoodsInstance.setBarcode(barcode); + expensiveGoodsInstance.setInvoicePlanId(orginalExpensiveGoodsInstance.getInvoicePlanId()); + //设置使用记录顺序号 + expensiveGoodsInstance.setUseRecordSortNumber(expensiveGoodsInstanceUseRecordSortNumber); + + expensiveGoodsInstanceList.add(expensiveGoodsInstance); + } + + }else{ + logger.debug("系统不支持该类型的物品录入使用记录"); + } + } + } + //对使用记录的一次性物品进行排序(按固定条码,优先将有批次号的排到前面,固定条码放到后面处理) + if(CollectionUtils.isNotEmpty(diposableGoodsItemList)){ + Collections.sort(diposableGoodsItemList); + } + } + + public static UseRecord buildUseRecordParamsForUpdate(String formParams , String items ,String tousseInstanceMaterialErrorDamageItems, + TousseInstanceManager tousseInstanceManager,BarcodeManager barcodeManager,ObjectDao objectDao) { + UseRecord useRecord = null; + if (StringUtils.isNotBlank(formParams)) { + useRecord = new Gson().fromJson(formParams, UseRecord.class); + } + if (useRecord == null) { + throw new RuntimeException("原始页面参数为空!"); + } + setUseRecordItemsFromParams(useRecord, items, tousseInstanceMaterialErrorDamageItems, + tousseInstanceManager,barcodeManager,objectDao); + return useRecord; + } + +} Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java =================================================================== diff -u -r25655 -r25697 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 25655) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/service/UseRecordManagerImpl.java (.../UseRecordManagerImpl.java) (revision 25697) @@ -692,7 +692,7 @@ @SuppressWarnings("unchecked") @Override - public List getUseRecordList(String departCoding) { + public List getLastOneDayUseRecordList(String departCoding) { Date now = new Date(); Date start = new Date(); start.setTime(now.getTime() - 24 * 60*60*1000); @@ -5663,6 +5663,24 @@ if(StringUtils.isNotBlank(patientInfo.getPatientArea())){ useRecord.setPatientArea(patientInfo.getPatientArea()); } + + //主刀医生(暂无) + /*if(StringUtils.isNotBlank(patientInfo.getSurgeon())){ + useRecord.setSurgeon(patientInfo.getSurgeon()); + }*/ + //特殊感染类型 + if(StringUtils.isNotBlank(patientInfo.getSpecialInfection())){ + useRecord.setSpecialInfection(patientInfo.getSpecialInfection()); + } + //住院次数 + if(patientInfo.getVisitId() != null){ + useRecord.setVisitId(patientInfo.getVisitId()); + } + + //备注 + if(StringUtils.isNotBlank(patientInfo.getRemark())){ + useRecord.setRemark(patientInfo.getRemark()); + } /*以下三个属性useRecord中没有对应字段设置*/ /*String ascriptionDepartment = patientInfo.getAscriptionDepartment(); String operationTime = patientInfo.getOperationTime();*/ Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/ButtJointUseRecordAction.java =================================================================== diff -u -r25580 -r25697 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/ButtJointUseRecordAction.java (.../ButtJointUseRecordAction.java) (revision 25580) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/ButtJointUseRecordAction.java (.../ButtJointUseRecordAction.java) (revision 25697) @@ -22,6 +22,7 @@ import com.forgon.disinfectsystem.datasynchronization.service.DataSynchronizationManager; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; import com.forgon.disinfectsystem.entity.useRecord.UseRecord; +import com.forgon.disinfectsystem.useRecord.util.UseRecordUtil; import com.forgon.log.model.Log; import com.forgon.log.service.LogManager; import com.forgon.security.model.User; @@ -203,7 +204,7 @@ String items = StrutsParamUtils.getPraramValue("items", null); //器械包实例登记使用记录所录入的丢失报损数据 String tousseInstanceMaterialErrorDamageItems = StrutsParamUtils.getPraramValue("tousseInstanceMaterialErrorDamageItems", null); - setUseRecordItemsFromParams(modified, items, tousseInstanceMaterialErrorDamageItems); + UseRecordUtil.setUseRecordItemsFromParams(modified, items, tousseInstanceMaterialErrorDamageItems,tousseInstanceManager,barcodeManager,objectDao); modified.setDepartCoding(departCoding); modified.setDepart(orgUnit.getName()); modified.setOperator(operator.getFullName()); @@ -255,7 +256,7 @@ String items = StrutsParamUtils.getPraramValue("items", null); //器械包实例登记使用记录所录入的丢失报损数据 String tousseInstanceMaterialErrorDamageItems = StrutsParamUtils.getPraramValue("tousseInstanceMaterialErrorDamageItems", null); - setUseRecordItemsFromParams(modified, items, tousseInstanceMaterialErrorDamageItems); + UseRecordUtil.setUseRecordItemsFromParams(modified, items, tousseInstanceMaterialErrorDamageItems,tousseInstanceManager,barcodeManager,objectDao); useRecordManager .saveAndReviewAndConvertUseRecordForm_TRANS_REQUIRED( modified, null, null, null, Index: ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java =================================================================== diff -u -r24505 -r25697 --- ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java (.../UseRecordAction.java) (revision 24505) +++ ssts-userecord/src/main/java/com/forgon/disinfectsystem/useRecord/action/UseRecordAction.java (.../UseRecordAction.java) (revision 25697) @@ -36,7 +36,7 @@ import com.forgon.disinfectsystem.entity.useRecord.UseDiposableGoodsItem; import com.forgon.disinfectsystem.entity.useRecord.UseRecord; import com.forgon.disinfectsystem.expensiveGoods.service.ExpensiveGoodsManager; -import com.forgon.disinfectsystem.recyclingapplication.service.RecyclingApplicationManager; +import com.forgon.disinfectsystem.useRecord.util.UseRecordUtil; import com.forgon.disinfectsystem.useRecord.vo.UseRecordPrintData; import com.forgon.disinfectsystem.vo.UseMaterialGoodsItem; import com.forgon.exception.service.ExceptionHandler; @@ -51,9 +51,6 @@ import com.forgon.tools.json.JSONUtil; import com.forgon.tools.string.StringTools; import com.google.gson.Gson; -import com.google.gson.JsonArray; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; import com.opensymphony.xwork2.ModelDriven; import com.forgon.exception.SystemException; @@ -76,8 +73,6 @@ private HttpOptionManager httpOptionManager; - private RecyclingApplicationManager recyclingApplicationManager; - private ExceptionHandler exceptionHandler; private LogManager appLogManager; @@ -104,11 +99,6 @@ this.appLogManager = appLogManager; } - public void setRecyclingApplicationManager( - RecyclingApplicationManager recyclingApplicationManager) { - this.recyclingApplicationManager = recyclingApplicationManager; - } - public void setExpensiveGoodsManager(ExpensiveGoodsManager expensiveGoodsManager) { this.expensiveGoodsManager = expensiveGoodsManager; } @@ -261,55 +251,6 @@ // } // } - private UseRecord buildUseRecordOriginalParamsForUpdate() { - UseRecord original = null; - String originalFormParams = StrutsParamUtils.getPraramValue( - "originalFormParams", ""); - String originalItems = StrutsParamUtils.getPraramValue("originalItems", - ""); - if (StringUtils.isNotBlank(originalFormParams)) { - original = new Gson().fromJson(originalFormParams, UseRecord.class); - // Long id = JSONUtil.optLong(formParamsObj,"id",null); - // String washHandNurse = - // JSONUtil.optString(formParamsObj,"washHandNurse",""); - // String circuitNurse = - // JSONUtil.optString(formParamsObj,"circuitNurse",""); - // String operationRoom = - // JSONUtil.optString(formParamsObj,"operationRoom",""); - // String treatmentNum = - // JSONUtil.optString(formParamsObj,"treatmentNum",""); - // String hospitalNum = - // JSONUtil.optString(formParamsObj,"hospitalNum",""); - // String patientName = - // JSONUtil.optString(formParamsObj,"patientName",""); - // String patientAge = - // JSONUtil.optString(formParamsObj,"patientAge",""); - // String patientSex = - // JSONUtil.optString(formParamsObj,"patientSex",""); - // String roomNumber = - // JSONUtil.optString(formParamsObj,"roomNumber",""); - // String bedNumber = - // JSONUtil.optString(formParamsObj,"bedNumber",""); - // String patientIDCard = - // JSONUtil.optString(formParamsObj,"patientIDCard",""); - // String doctorName = - // JSONUtil.optString(formParamsObj,"doctorName",""); - // String operationName = - // JSONUtil.optString(formParamsObj,"operationName",""); - // String remark = JSONUtil.optString(formParamsObj,"remark",""); - // useRecord.setId(id); - // useRecord.setRemark(remark); - } - if (original == null) { - throw new RuntimeException("原始页面参数为空!"); - } - //器械包实例登记使用记录所录入的丢失报损数据 - String tousseInstanceMaterialErrorDamageItems = StrutsParamUtils.getPraramValue("tousseInstanceMaterialErrorDamageItems", ""); - // items列表 - setUseRecordItemsFromParams(original, originalItems,tousseInstanceMaterialErrorDamageItems); - return original; - } - /** * 新增或修改使用记录(常规功能与干预都调用此方法,但干预管理的操作有传参数useInterfere为true) * 增加并发控制 @@ -333,8 +274,13 @@ //器械包实例登记使用记录所录入的丢失报损数据 String tousseInstanceMaterialErrorDamageItems = StrutsParamUtils.getPraramValue("tousseInstanceMaterialErrorDamageItems", null); if (StringUtils.isNotBlank(id)) { - UseRecord original = buildUseRecordOriginalParamsForUpdate(); - setUseRecordItemsFromParams(modified, items, tousseInstanceMaterialErrorDamageItems); + String originalFormParams = StrutsParamUtils.getPraramValue("originalFormParams", ""); + String originalItems = StrutsParamUtils.getPraramValue("originalItems",""); + //UseRecord original = buildUseRecordOriginalParamsForUpdate(); + UseRecord original = UseRecordUtil.buildUseRecordParamsForUpdate(originalFormParams , originalItems , tousseInstanceMaterialErrorDamageItems , tousseInstanceManager,barcodeManager,objectDao); + //setUseRecordItemsFromParams(modified, items, tousseInstanceMaterialErrorDamageItems); + UseRecordUtil.setUseRecordItemsFromParams(modified, items, tousseInstanceMaterialErrorDamageItems, + tousseInstanceManager,barcodeManager,objectDao); //是否来自干预管理 String useInterfere = StrutsParamUtils.getPraramValue("useInterfere", null); if (StringUtils.isBlank(useInterfere)){ @@ -348,13 +294,11 @@ } } else { modified = useRecord; - setUseRecordItemsFromParams(modified, items, tousseInstanceMaterialErrorDamageItems); + //setUseRecordItemsFromParams(modified, items, tousseInstanceMaterialErrorDamageItems); + UseRecordUtil.setUseRecordItemsFromParams(modified, items, tousseInstanceMaterialErrorDamageItems, + tousseInstanceManager,barcodeManager,objectDao); useRecordManager.saveUseRecord_TRANS_REQUIRED(modified); } - recyclingApplicationManager.updateRecyclingStatus(modified.getId()); - //记录操作日志 - appLogManager.saveLog(AcegiHelper.getLoginUser(), Log.MODEL_USERECORD, "新增或修改使用记录", - "id=" + id + ",useRecord=" + useRecord.toString()); JSONUtil.addSuccess(json, true); } catch (RuntimeException e) { e.printStackTrace(); @@ -628,7 +572,9 @@ //器械包实例登记使用记录所录入的丢失报损数据 String tousseInstanceMaterialErrorDamageItems = StrutsParamUtils.getPraramValue("tousseInstanceMaterialErrorDamageItems", null); UseRecord modified = useRecord; - setUseRecordItemsFromParams(modified, items, tousseInstanceMaterialErrorDamageItems); + //setUseRecordItemsFromParams(modified, items, tousseInstanceMaterialErrorDamageItems); + UseRecordUtil.setUseRecordItemsFromParams(modified, items, tousseInstanceMaterialErrorDamageItems, + tousseInstanceManager,barcodeManager,objectDao); useRecordManager .saveAndReviewAndConvertUseRecordForm_TRANS_REQUIRED( modified, operator, depart, departCoding, Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java =================================================================== diff -u -r25611 -r25697 --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 25611) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/service/ServiceManagerImpl.java (.../ServiceManagerImpl.java) (revision 25697) @@ -134,6 +134,7 @@ import com.forgon.disinfectsystem.toussetransition.service.TousseTransitionRecordManager; import com.forgon.disinfectsystem.useRecord.service.UseRecordManager; import com.forgon.disinfectsystem.useRecord.service.UseRecordToJson; +import com.forgon.disinfectsystem.useRecord.util.UseRecordUtil; import com.forgon.disinfectsystem.vo.TousseSimpleVO; import com.forgon.disinfectsystem.washTransition.service.WashTransitionItemManager; import com.forgon.disinfectsystem.washTransition.service.WashTransitionMaterialManager; @@ -164,6 +165,7 @@ import com.forgon.tools.Path; import com.forgon.tools.SpringBeanManger; import com.forgon.tools.SqlBuilder; +import com.forgon.tools.StrutsParamUtils; import com.forgon.tools.date.DateTools; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; @@ -325,6 +327,7 @@ logger.error("方法返回值类型不正确"); return JSONUtil.buildErrorMsgJsonResult("调用异常"); } + logger.debug("param jsonObject=" + jsonObject); result = (String) method.invoke(this, jsonObject); } catch (NoSuchMethodException ex) { retException = new RuntimeException(JSONUtil.buildErrorMsgJsonResult("非法action值")); @@ -1265,7 +1268,8 @@ String orgUnitCoding = JSONUtil.optString(params, "orgUnitCoding", ""); return wareHouseManager.getAllWareHouse(orgUnitCoding).toString(); } - // 获取某部门的所有使用记录 + + // 获取某部门的所有使用记录(24小时内) public String getUseRecordList(JSONObject params) { String departCode = params.optString("departCode"); if (StringUtils.isBlank(departCode)) { @@ -1274,7 +1278,7 @@ // int firstIndex = params.optInt("firstIndex"); // int maxResultCount = params.optInt("maxResultCount"); - List useRecordList = useRecordManager.getUseRecordList( + List useRecordList = useRecordManager.getLastOneDayUseRecordList( departCode); JsonConfig jsonConfig = new JsonConfig(); jsonConfig.registerJsonValueProcessor(Date.class, @@ -1357,25 +1361,109 @@ List tousseInstanceList = tousseInstanceManager .findTousseInstanceListByUseRecordId(id); JSONObject useRecordJson = JSONObject.fromObject(useRecord, config1); + //使用记录的器械包 JSONArray tousseInstanceJsonArray = JSONArray.fromObject( tousseInstanceList, config2); JsonConfig jc = JSONUtil.buildJsonConfig("id","barcode","showName"); + //使用记录的高值耗材(新高值耗材) JSONArray expensiveGoodsInstanceArray = JSONArray.fromObject(useRecord.getExpensiveGoodsInstanceList(objectDao),jc); + //使用记录的一次性物品 + JSONArray diposableGoodsItemsArray = JSONArray.fromObject(useRecord.getDiposableGoodsItems()); + //使用记录的高值耗材(旧的一次性) + JSONArray expensiveDisposableGoodsArray = JSONArray.fromObject(useRecord.getExpensiveDisposableGoodsInstanceList(objectDao),jc); return new JSONStringer().object().key("success").value(true) .key("useRecord").value(useRecordJson) .key("tousseInstanceList").value(tousseInstanceJsonArray) .key("expensiveGoodsInstanceList").value(expensiveGoodsInstanceArray) + .key("disposableGoodsItemList").value(diposableGoodsItemsArray) + .key("expensiveDisposableGoodsList").value(expensiveDisposableGoodsArray) .endObject().toString(); } - // 提交单条使用记录 - public String submitUseRecord(JSONObject params) { + /** + * 提交单条使用记录(原旧的方法,只支持普通器械包,不支持一次性物品等) + * @param params + * @return + */ + @Deprecated + public String submitUseRecordOld(JSONObject params) { useRecordManager.saveOrUpdateWithPDA(params); return JSONUtil.buildJsonObject(true).toString(); } /** + * 提交单条使用记录(新增和修改的新方法,支持器械包、一次性物品。和PC的保持一致) + * @param params.格式如下: + * 新增: + * { + * "formParams":{"id":"","washHandNurse":"c","circuitNurse":"d","operationRoom":"e","treatmentNum":"b","hospitalNum":"a","patientName":"f","patientAge":"g","patientSex":"\u7537","roomNumber":"i","bedNumber":"j","patientIDCard":"k","doctorName":"l","surgeon":"","specialInfection":"","operationTime":"2019-01-23T11:01:00","operationScheduleId":"n","remark":"z"}, + * "items":[{"id":15984,"barcode":"010027829","amount":1,"batchNo":"","tousseDefinitionName":"吸球","showTousseName":"吸球","packageType":"纸塑","validUntil":"2019-01-26","tousseType":"器械包","includeImplant":"否","actualUsed":"是","isRecycling":"是","isConvertApplyGoods":"是","haveUnSupplementMaterials":false,"recordProperties":{"dirty":false,"modified":null}},{"id":15964,"barcode":"010027809","amount":1,"batchNo":"","tousseDefinitionName":"子宫剪","showTousseName":"子宫剪","packageType":"纸塑","validUntil":"2019-01-26","tousseType":"器械包","includeImplant":"否","actualUsed":"是","isRecycling":"是","isConvertApplyGoods":"是","haveUnSupplementMaterials":false,"recordProperties":{"dirty":false,"modified":null}},{"id":"","barcode":"010044695","tousseDefinitionName":"","amount":1,"batchNo":"1805L","showTousseName":"无菌手套(7.5#)","packageType":"","validUntil":"2020-05-22","tousseType":"一次性物品","foreignTousseApp_id":"","includeImplant":"否","actualUsed":"是","haveUnSupplementMaterials":false,"recordProperties":{"dirty":false,"modified":null}},{"id":"","barcode":"010045750","tousseDefinitionName":"","amount":1,"batchNo":"20180428","showTousseName":"注射器60ml","packageType":"","validUntil":"2021-04-26","tousseType":"一次性物品","foreignTousseApp_id":"","includeImplant":"否","actualUsed":"是","haveUnSupplementMaterials":false,"recordProperties":{"dirty":false,"modified":null}},{"id":"","barcode":"A010104059","tousseDefinitionName":"","amount":1,"showTousseName":"注射器20ml","packageType":"","tousseType":"一次性物品","foreignTousseApp_id":"","includeImplant":"否","actualUsed":"是","haveUnSupplementMaterials":false,"recordProperties":{"dirty":false,"modified":null}},{"id":"","barcode":"A010104142","tousseDefinitionName":"","amount":1,"showTousseName":"注射器10ml(8#)","packageType":"","tousseType":"一次性物品","foreignTousseApp_id":"","includeImplant":"否","actualUsed":"是","haveUnSupplementMaterials":false,"recordProperties":{"dirty":false,"modified":null}}], + * "tousseInstanceMaterialErrorDamageItems": [ + * {id:1,errorRemark:"丢失原因说明",damageRemark:"报损原因说明",errorData:[{materialId:"材料id1",errorAmount:1},{materialId:"材料id2",errorAmount:0},...{materialId:"材料id3",errorAmount:1}}],damageData:[{materialId:"材料id1",errorAmount:1},{materialId:"材料id2",errorAmount:0},...{materialId:"材料id3",errorAmount:1}}]}, + * {id:2,errorRemark:"丢失原因说明",damageRemark:"报损原因说明",errorData:[{materialId:"材料id1",errorAmount:1},{materialId:"材料id2",errorAmount:0},...{materialId:"材料id3",errorAmount:1}}],damageData:[{materialId:"材料id1",errorAmount:1},{materialId:"材料id2",errorAmount:0},...{materialId:"材料id3",errorAmount:1}}]} + * ] + * } + * 修改: + * { + * "formParams":{"id":"407","washHandNurse":"\u5434\u96ea\u7389","circuitNurse":"\u5434\u96ea\u7389","operationRoom":"7","treatmentNum":"","hospitalNum":"235092","patientName":"\u7f57\u5143\u7f8e","patientAge":"","patientSex":"\u5973","roomNumber":"","bedNumber":"","patientIDCard":"","doctorName":"","surgeon":"","specialInfection":"","remark":""}, + * "items":[{"id":37618,"barcode":"010054985","tousseDefinitionName":"手术室人流包","amount":1,"idCardUseAmount":"","batchNo":"","packageType":"无纺布(双层)","goodsType":"","validUntil":"2018-10-13","showTousseName":"手术室人流包","tousseType":"器械包","foreignTousseApp_id":"","isUrgentForUseRecord":"否","includeImplant":"否","actualUsed":"是","isRecycling":"是","isConvertApplyGoods":"是","haveUnSupplementMaterials":"","tousseMaterialErrorDamageJsonData":{"id":37618},"subTousseDefinitionId":"","comboTousseInstanceId":"","usedAmount":"","recyclingStatus":"已回收","recordProperties":{"dirty":false,"modified":null}},{"id":37362,"barcode":"010054729","tousseDefinitionName":"OR截石位敷料包","amount":1,"idCardUseAmount":"","batchNo":"","packageType":"无纺布(双层)","goodsType":"","validUntil":"2018-10-13","showTousseName":"OR截石位敷料包","tousseType":"敷料包","foreignTousseApp_id":"","isUrgentForUseRecord":"否","includeImplant":"否","actualUsed":"是","isRecycling":"否","isConvertApplyGoods":"是","haveUnSupplementMaterials":"","tousseMaterialErrorDamageJsonData":{"id":37362},"subTousseDefinitionId":"","comboTousseInstanceId":"","usedAmount":"","recyclingStatus":"","recordProperties":{"dirty":false,"modified":null}}], + * "tousseInstanceMaterialErrorDamageItems":[ + * {id:1,errorRemark:"丢失原因说明",damageRemark:"报损原因说明",errorData:[{materialId:"材料id1",errorAmount:1},{materialId:"材料id2",errorAmount:0},...{materialId:"材料id3",errorAmount:1}}],damageData:[{materialId:"材料id1",errorAmount:1},{materialId:"材料id2",errorAmount:0},...{materialId:"材料id3",errorAmount:1}}]}, + * {id:2,errorRemark:"丢失原因说明",damageRemark:"报损原因说明",errorData:[{materialId:"材料id1",errorAmount:1},{materialId:"材料id2",errorAmount:0},...{materialId:"材料id3",errorAmount:1}}],damageData:[{materialId:"材料id1",errorAmount:1},{materialId:"材料id2",errorAmount:0},...{materialId:"材料id3",errorAmount:1}}]} + * ] + * "originalFormParams":{"id":"407","washHandNurse":"\u5434\u96ea\u7389","circuitNurse":"\u5434\u96ea\u7389","operationRoom":"7","treatmentNum":"","hospitalNum":"235092","patientName":"\u7f57\u5143\u7f8e","patientAge":"","patientSex":"\u5973","roomNumber":"","bedNumber":"","patientIDCard":"","doctorName":"","surgeon":"","specialInfection":"","remark":""}, + * "originalItems":[{"id":37618,"barcode":"010054985","tousseDefinitionName":"手术室人流包","amount":1,"idCardUseAmount":"","batchNo":"","packageType":"无纺布(双层)","goodsType":"","validUntil":"2018-10-13","showTousseName":"手术室人流包","tousseType":"器械包","foreignTousseApp_id":"","isUrgentForUseRecord":"否","includeImplant":"否","actualUsed":"是","isRecycling":"是","isConvertApplyGoods":"是","haveUnSupplementMaterials":"","tousseMaterialErrorDamageJsonData":{"id":37618},"subTousseDefinitionId":"","comboTousseInstanceId":"","usedAmount":"","recyclingStatus":"已回收","recordProperties":{"dirty":false,"modified":null}},{"id":37362,"barcode":"010054729","tousseDefinitionName":"OR截石位敷料包","amount":1,"idCardUseAmount":"","batchNo":"","packageType":"无纺布(双层)","goodsType":"","validUntil":"2018-10-13","showTousseName":"OR截石位敷料包","tousseType":"敷料包","foreignTousseApp_id":"","isUrgentForUseRecord":"否","includeImplant":"否","actualUsed":"是","isRecycling":"否","isConvertApplyGoods":"是","haveUnSupplementMaterials":"","tousseMaterialErrorDamageJsonData":{"id":37362},"subTousseDefinitionId":"","comboTousseInstanceId":"","usedAmount":"","recyclingStatus":"","recordProperties":{"dirty":false,"modified":null}}], + * "originalTousseInstanceMaterialErrorDamageItems":[ + * {id:1,errorRemark:"丢失原因说明",damageRemark:"报损原因说明",errorData:[{materialId:"材料id1",errorAmount:1},{materialId:"材料id2",errorAmount:0},...{materialId:"材料id3",errorAmount:1}}],damageData:[{materialId:"材料id1",errorAmount:1},{materialId:"材料id2",errorAmount:0},...{materialId:"材料id3",errorAmount:1}}]}, + * {id:2,errorRemark:"丢失原因说明",damageRemark:"报损原因说明",errorData:[{materialId:"材料id1",errorAmount:1},{materialId:"材料id2",errorAmount:0},...{materialId:"材料id3",errorAmount:1}}],damageData:[{materialId:"材料id1",errorAmount:1},{materialId:"材料id2",errorAmount:0},...{materialId:"材料id3",errorAmount:1}}]} + * ] + * } + * @return + */ + public String submitUseRecord(JSONObject params) { + JSONObject result = JSONUtil.buildJsonObject(false); + String formParams = params.optString("formParams", ""); + //使用物品物品(器械包、一次性物品等) + String items = params.optString("items", null); + //器械包实例登记使用记录所录入的丢失报损数据 + String tousseInstanceMaterialErrorDamageItems = params.optString("tousseInstanceMaterialErrorDamageItems", null); + //修改后的使用记录 + UseRecord modified = UseRecordUtil.buildUseRecordParamsForUpdate(formParams ,items , tousseInstanceMaterialErrorDamageItems , tousseInstanceManager,barcodeManager,objectDao); + String loginInfo = params.optString("loginInfo", ""); + if(StringUtils.isNotBlank(loginInfo) && StringUtils.isBlank(modified.getDepartCoding())){ + try{ + JSONObject loginInfoJsonObject = JSONObject.fromObject(loginInfo); + modified.setDepartCoding(loginInfoJsonObject.optString("orgUnitCodes")); + modified.setDepart(loginInfoJsonObject.optString("orgUnitName")); + }catch(Exception e){ + e.printStackTrace(); + } + } + String operationTimeStr = params.optString("operationTimeStr", null); + if(StringUtils.isNotBlank(operationTimeStr)){ + modified.setOperationTime(ForgonDateUtils.safelyParseDate(operationTimeStr)); + } + //修改使用记录 + if(DatabaseUtil.isPoIdValid(modified.getId())){ + //修改前的使用记录 + UseRecord original = null; + String originalFormParams = params.optString("originalFormParams", ""); + String originalItems = params.optString("originalItems",""); + original = UseRecordUtil.buildUseRecordParamsForUpdate(originalFormParams ,originalItems , tousseInstanceMaterialErrorDamageItems , tousseInstanceManager,barcodeManager,objectDao); + UseRecordUtil.setUseRecordItemsFromParams(modified, items, tousseInstanceMaterialErrorDamageItems,tousseInstanceManager,barcodeManager,objectDao); + useRecordManager.updateUseRecord_TRANS_REQUIRED(original, modified); + JSONUtil.addSuccess(result, true); + }else{ + //新增使用记录 + UseRecordUtil.setUseRecordItemsFromParams(modified, items, tousseInstanceMaterialErrorDamageItems,tousseInstanceManager,barcodeManager,objectDao); + useRecordManager.saveUseRecord_TRANS_REQUIRED(modified); + JSONUtil.addSuccess(result, true); + } + return result.toString(); + } + + /** * 保存并审核、转换申请单。PDA上只处理器械包的情况,没有丢失报损 * @param params * @return @@ -1434,6 +1522,13 @@ return JSONUtil.buildErrorMsgJsonResult("暂不支持登记高值耗材"); }*/ + if(barcodeDevice instanceof TousseInstance){ + TousseInstance ti = (TousseInstance)barcodeDevice; + if(ti.isComboTousse()){ + return JSONUtil.buildErrorMsgJsonResult("PDA使用记录暂不支持登记聚合包"); + } + } + if(!(barcodeDevice instanceof TousseInstance) && !(barcodeDevice instanceof ExpensiveGoodsInstance) && !(barcodeDevice instanceof DisposableGoodsBatch)){ return JSONUtil.buildErrorMsgJsonResult("请扫描器械包条码或者诊疗号或者住院号"); } Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/useRecord/UseRecord.java =================================================================== diff -u -r25307 -r25697 --- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/useRecord/UseRecord.java (.../UseRecord.java) (revision 25307) +++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/useRecord/UseRecord.java (.../UseRecord.java) (revision 25697) @@ -33,6 +33,7 @@ import com.fasterxml.jackson.annotation.JsonIgnore; import com.forgon.Constants; import com.forgon.disinfectsystem.entity.assestmanagement.DisposableGoods; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveDisposablegoods; import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveGoodsInstance; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.SubComboTousseUseRecord; import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseDefinition; @@ -139,7 +140,7 @@ private String status = STATUS_UNAUDITED;//状态 - private Integer statusSequence;//状态序列号 + private Integer statusSequence = STATUS_SEQ_UNAUDITED;//状态序列号 private String specialInfection;//特殊感染类型 @@ -356,18 +357,32 @@ } /** - * 查询该使用记录所有的高值耗材实例 + * 查询该使用记录所有的高值耗材实例(非一次性物品) * @param dao * @return */ public List getExpensiveGoodsInstanceList(ObjectDao dao) { //改为按使用记录顺序号排序 + @SuppressWarnings("unchecked") List expensiveGoodsInstanceList = dao.findBySql(ExpensiveGoodsInstance.class.getSimpleName(), " where useRecord.id=" + id + " order by useRecordSortNumber"); return expensiveGoodsInstanceList; } /** + * 查询该使用记录所有的高值耗材实例(一次性物品) + * @param dao + * @return + */ + public List getExpensiveDisposableGoodsInstanceList(ObjectDao dao) { + //改为按使用记录顺序号排序 + @SuppressWarnings("unchecked") + List expensiveDisposableGoodsList = + dao.findBySql(ExpensiveDisposablegoods.class.getSimpleName(), " where useRecord.id=" + id + " order by useRecordSortNumber"); + return expensiveDisposableGoodsList; + } + + /** * 查询该使用记录里会被转换至申请单的申请项的包实例集合 * 条件如下:包类型为器械包、敷料包中的一种并且(包实例的是否真正使用为否或者包定义的是否转换为是) * 自定义器械包无条件转换