Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/security/service/WebServiceManagerImpl.java =================================================================== diff -u -r17550 -r17560 --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/security/service/WebServiceManagerImpl.java (.../WebServiceManagerImpl.java) (revision 17550) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/security/service/WebServiceManagerImpl.java (.../WebServiceManagerImpl.java) (revision 17560) @@ -2005,7 +2005,7 @@ String barcode = params.getString("barcode"); String departCoding = params.getString("departCoding"); String receiver = params.getString("receiver"); - return tousseInstanceManager.singTousseInstanceByBarcode(barcode, departCoding, receiver); + return tousseInstanceManager.signTousseInstanceByBarcode(barcode, departCoding, receiver); } @Override Index: ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java =================================================================== diff -u -r17314 -r17560 --- ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java (.../TousseInstanceAction.java) (revision 17314) +++ ssts-packing/src/main/java/com/forgon/disinfectsystem/packing/action/TousseInstanceAction.java (.../TousseInstanceAction.java) (revision 17560) @@ -211,7 +211,7 @@ */ public void signTousseInstanceByBarcode(){ String barcode = StrutsParamUtils.getPraramValue("barcode", null); - String result = tousseInstanceManager.singTousseInstanceByBarcode(barcode); + String result = tousseInstanceManager.signTousseInstanceByBarcode(barcode); HttpServletResponse response = StrutsParamUtils.getResponse(); response.setCharacterEncoding("UTF-8"); Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/mobilenursing/common/service/MobileNursingWebServiceImpl.java =================================================================== diff -u -r17457 -r17560 --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/mobilenursing/common/service/MobileNursingWebServiceImpl.java (.../MobileNursingWebServiceImpl.java) (revision 17457) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/mobilenursing/common/service/MobileNursingWebServiceImpl.java (.../MobileNursingWebServiceImpl.java) (revision 17560) @@ -1,5 +1,6 @@ package com.forgon.disinfectsystem.webservice.mobilenursing.common.service; +import java.util.Collections; import java.util.Date; import java.util.List; @@ -15,6 +16,8 @@ import com.forgon.directory.acegi.tools.AcegiHelper; import com.forgon.directory.model.BarcodeDevice; +import com.forgon.directory.model.OrgUnit; +import com.forgon.directory.service.OrgUnitManager; import com.forgon.disinfectsystem.barcode.service.BarcodeManager; import com.forgon.disinfectsystem.common.CssdUtils; import com.forgon.disinfectsystem.datasynchronization.model.PatientInfoVO; @@ -27,6 +30,8 @@ import com.forgon.disinfectsystem.entity.useRecord.UseRecord; import com.forgon.disinfectsystem.tousse.toussedefinition.service.TousseInstanceManager; import com.forgon.disinfectsystem.useRecord.service.UseRecordManager; +import com.forgon.security.model.User; +import com.forgon.security.service.UserManager; import com.forgon.tools.db.DatabaseUtil; import com.forgon.tools.hibernate.ObjectDao; import com.forgon.tools.json.JSONUtil; @@ -53,7 +58,11 @@ private BarcodeManager barcodeManager; + private UserManager userManager; + private DataSynchronizationManager dataSynchronizationManager; + + private OrgUnitManager orgUnitManager; public void setTousseInstanceManager(TousseInstanceManager tousseInstanceManager) { this.tousseInstanceManager = tousseInstanceManager; @@ -71,15 +80,44 @@ this.barcodeManager = barcodeManager; } + public void setDataSynchronizationManager( + DataSynchronizationManager dataSynchronizationManager) { + this.dataSynchronizationManager = dataSynchronizationManager; + } + + public void setUserManager(UserManager userManager) { + this.userManager = userManager; + } + + public void setOrgUnitManager(OrgUnitManager orgUnitManager) { + this.orgUnitManager = orgUnitManager; + } + @Override public String signTousse(String param) { logger.debug("signTousse param=" + param); try{ XMLSerializer xmlSerializer = new XMLSerializer(); JSONObject jsonObject = (JSONObject)xmlSerializer.read(param); - String result = tousseInstanceManager.singTousseInstanceByBarcode(jsonObject.optString("barcode")); + //签收人帐号 + String signUserCode = jsonObject.optString("operator"); + if(StringUtils.isEmpty(signUserCode)){ + return JSONUtil.buildJsonObject(false, "签收人工号不能为空").toString(); + } + User user = userManager.getUserByUserCode(signUserCode); + if(user == null){ + return JSONUtil.buildJsonObject(false, "没有找到工号:"+ signUserCode +"对应的人员信息").toString(); + } + if(StringUtils.isEmpty(user.getCurrentOrgUnitCode())){ + return JSONUtil.buildJsonObject(false, "签收人的当前所属科室不能为空").toString(); + } + OrgUnit orgUnit = (OrgUnit)orgUnitManager.getOrgUnitByCode(user.getCurrentOrgUnitCode()); + if(orgUnit == null){ + return JSONUtil.buildJsonObject(false, "没有找到工号:"+ signUserCode +"的所属科室信息").toString(); + } + String result = tousseInstanceManager.signTousseInstanceByBarcode(jsonObject.optString("barcode") , orgUnit.getOrgUnitCoding() , signUserCode); JSONObject jsonResult = JSONObject.fromObject(result); - return JSONUtil.buildJsonObject(jsonResult.optBoolean("success"), jsonResult.optString("message")).toString(); + return JSONUtil.buildJsonObject(jsonResult.optBoolean("success"), jsonResult.optString("msg")).toString(); }catch(Exception e){ e.printStackTrace(); return JSONUtil.buildJsonObject(false, e.getCause().getMessage()).toString(); @@ -92,16 +130,60 @@ try{ XMLSerializer xmlSerializer = new XMLSerializer(); JSONObject jsonObject = (JSONObject)xmlSerializer.read(param); + + //操作人帐号 + String operator = jsonObject.optString("operator"); + if(StringUtils.isEmpty(operator)){ + return JSONUtil.buildJsonObject(false, "操作人工号不能为空").toString(); + } + User user = userManager.getUserByUserCode(operator); + if(user == null){ + return JSONUtil.buildJsonObject(false, "没有找到工号:"+ operator +"对应的人员信息").toString(); + } + if(StringUtils.isEmpty(user.getCurrentOrgUnitCode())){ + return JSONUtil.buildJsonObject(false, "操作人的当前所属科室不能为空").toString(); + } + OrgUnit orgUnit = (OrgUnit)orgUnitManager.getOrgUnitByCode(user.getCurrentOrgUnitCode()); + if(orgUnit == null){ + return JSONUtil.buildJsonObject(false, "没有找到工号:"+ operator +"的所属科室信息").toString(); + } + String hospitalNumber = jsonObject.optString("hospitalNumber"); UseRecord useRecord = null; + @SuppressWarnings("unchecked") List list = objectDao.findBySql(UseRecord.class.getSimpleName(), - "where hospitalNum='" + hospitalNumber + "' and status='" + UseRecord.STATUS_UNAUDITED + "' order by id desc"); + "where hospitalNum='" + hospitalNumber + "' and status='" + UseRecord.STATUS_UNAUDITED + + "' and departCoding = '"+ orgUnit.getOrgUnitCoding() +"' order by id desc"); if(CollectionUtils.isEmpty(list)){ + + PatientInfoVO[] vos = dataSynchronizationManager.findPatientInfoByHospitalNum(hospitalNumber); + //测试代码: + /*PatientInfoVO[] vos = new PatientInfoVO[1]; + PatientInfoVO testVo = new PatientInfoVO(); + testVo.setBedNumber("a0"); + testVo.setCircuitNurse("a1"); + testVo.setDoctorName("a2"); + testVo.setHospitalNumber(hospitalNumber); + testVo.setOperation("a4"); + testVo.setOpRoomId("a5"); + testVo.setPatientAge("a6"); + testVo.setPatientIDCard("a7"); + testVo.setPatientName("a8"); + testVo.setPatientSex("男"); + testVo.setRemark("a9"); + testVo.setRoomNumber("a10"); + testVo.setSpecialInfection("a11"); + testVo.setVisitId(10L); + testVo.setWashHandNurse("a12"); + testVo.setOperationScheduleId("a13"); + testVo.setOperationTime("a14"); + vos[0] = testVo;*/ + if(vos == null || vos.length == 0){ return JSONUtil.buildJsonObject(false, "未找到住院号为" + hospitalNumber + "的使用记录及病人信息").toString(); } - PatientInfoVO vo = vos[vos.length - 1]; + PatientInfoVO vo = vos[0]; useRecord = new UseRecord(); useRecord.setBedNumber(vo.getBedNumber()); useRecord.setCircuitNurse(vo.getCircuitNurse()); @@ -113,7 +195,7 @@ useRecord.setHospitalNum(hospitalNumber); useRecord.setOperation(vo.getOperation()); useRecord.setOperationRoom(vo.getOpRoomId()); - useRecord.setOperator(AcegiHelper.getLoginUserFullName()); + useRecord.setOperator(operator); useRecord.setPatientAge(vo.getPatientAge()); useRecord.setPatientIDCard(vo.getPatientIDCard()); useRecord.setPatientName(vo.getPatientName()); @@ -125,6 +207,11 @@ useRecord.setStatusSequence(UseRecord.STATUS_SEQ_UNAUDITED); useRecord.setVisitId(vo.getVisitId()); useRecord.setWashHandNurse(vo.getWashHandNurse()); + + //使用记录所在科室 + useRecord.setDepart(orgUnit.getName()); + useRecord.setDepartCoding(orgUnit.getOrgUnitCoding()); + objectDao.saveOrUpdate(useRecord); }else{ useRecord = list.get(0); @@ -141,7 +228,7 @@ jsonResult.put("patientIDCard",useRecord.getPatientIDCard()); jsonResult.put("doctorName",useRecord.getDoctorName()); jsonResult.put("operation",useRecord.getOperation()); - //jsonResult.put("operationTime",useRecord.get); + jsonResult.put("operationTime",useRecord.getOperationTime()); //jsonResult.put("patientArea",useRecord.getpa); jsonResult.put("roomNumber",useRecord.getRoomNumber()); jsonResult.put("bedNumber",useRecord.getBedNumber()); @@ -209,30 +296,56 @@ if(bd instanceof TousseInstance || bd instanceof IDCardInstance || bd instanceof ExpensiveDisposablegoods || bd instanceof DisposableGoodsBatch){ + //未签收的包能否录使用记录 + boolean notSignedItemsCanRegistUseRecord = CssdUtils.getSystemSetConfigByNameBool("notSignedItemsCanRegistUseRecord"); if(bd instanceof TousseInstance){ TousseInstance ti = (TousseInstance)bd; - if(ti.isShipped()){ - ti.setStatus(TousseInstance.STATUS_USED); - ti.setUseRecord_id(useRecord.getId()); - List list = useRecord.getTousseInstanceList(objectDao); - ti.setUseRecordSortNumber(CollectionUtils.isEmpty(list) ? 1 : list.size() + 1); - objectDao.saveOrUpdate(ti); + if(notSignedItemsCanRegistUseRecord){ + if(ti.isShipped() || ti.isSigned()){ + ti.setStatus(TousseInstance.STATUS_USED); + ti.setUseRecord_id(useRecord.getId()); + List list = useRecord.getTousseInstanceList(objectDao); + ti.setUseRecordSortNumber(CollectionUtils.isEmpty(list) ? 1 : list.size() + 1); + objectDao.saveOrUpdate(ti); + }else{ + return JSONUtil.buildJsonObject(false, "条码为" + barcode + "的器械包状态为" + ti.getStatus() + ",不能登记使用记录").toString(); + } }else{ - return JSONUtil.buildJsonObject(false, "条码为" + barcode + "的器械包状态为" + ti.getStatus() + ",不能登记使用记录").toString(); + if(ti.isSigned()){ + ti.setStatus(TousseInstance.STATUS_USED); + ti.setUseRecord_id(useRecord.getId()); + List list = useRecord.getTousseInstanceList(objectDao); + ti.setUseRecordSortNumber(CollectionUtils.isEmpty(list) ? 1 : list.size() + 1); + objectDao.saveOrUpdate(ti); + }else{ + return JSONUtil.buildJsonObject(false, "条码为" + barcode + "的器械包状态为" + ti.getStatus() + ",不能登记使用记录").toString(); + } } } if(bd instanceof IDCardInstance){ IDCardInstance ii = (IDCardInstance)bd; TousseInstance ti = tousseInstanceManager.getTousseInstanceById(String.valueOf(ii.getLastTousseInstanceId())); - if(ti.isShipped()){ - ti.setStatus(TousseInstance.STATUS_USED); - ti.setUseRecord_id(useRecord.getId()); - List list = useRecord.getTousseInstanceList(objectDao); - ti.setUseRecordSortNumber(CollectionUtils.isEmpty(list) ? 1 : list.size() + 1); - objectDao.saveOrUpdate(ti); + if(notSignedItemsCanRegistUseRecord){ + if(ti.isShipped() || ti.isSigned()){ + ti.setStatus(TousseInstance.STATUS_USED); + ti.setUseRecord_id(useRecord.getId()); + List list = useRecord.getTousseInstanceList(objectDao); + ti.setUseRecordSortNumber(CollectionUtils.isEmpty(list) ? 1 : list.size() + 1); + objectDao.saveOrUpdate(ti); + }else{ + return JSONUtil.buildJsonObject(false, "条码为" + barcode + "的器械包状态为" + ti.getStatus() + ",不能登记使用记录").toString(); + } }else{ - return JSONUtil.buildJsonObject(false, "条码为" + barcode + "的器械包状态为" + ti.getStatus() + ",不能登记使用记录").toString(); + if(ti.isSigned()){ + ti.setStatus(TousseInstance.STATUS_USED); + ti.setUseRecord_id(useRecord.getId()); + List list = useRecord.getTousseInstanceList(objectDao); + ti.setUseRecordSortNumber(CollectionUtils.isEmpty(list) ? 1 : list.size() + 1); + objectDao.saveOrUpdate(ti); + }else{ + return JSONUtil.buildJsonObject(false, "条码为" + barcode + "的器械包状态为" + ti.getStatus() + ",不能登记使用记录").toString(); + } } } @@ -255,6 +368,9 @@ udgi.setName(CssdUtils.getDiposableGoodsName(dgb.getDiposableGoods())); udgi.setValidUntil(dgb.getExpDateStr()); objectDao.saveOrUpdate(udgi); + + useRecord.setDiposableGoodsItems(Collections.singletonList(udgi)); + objectDao.saveOrUpdate(useRecord); } JSONObject result = new JSONObject(); @@ -274,17 +390,21 @@ } } - @SuppressWarnings("finally") @Override public String reviewAndConvertUseRecord(String param) { logger.debug("reviewAndConvertUseRecord param=" + param); String message = null; try{ XMLSerializer xmlSerializer = new XMLSerializer(); JSONObject jsonObject = (JSONObject)xmlSerializer.read(param); + //操作人帐号 + String operator = jsonObject.optString("operator"); + if(StringUtils.isEmpty(operator)){ + return JSONUtil.buildJsonObject(false, "操作人工号不能为空").toString(); + } UseRecord useRecord = useRecordManager.getUseRecordById(jsonObject.optString("useRecordId")); useRecordManager.saveAndReviewAndConvertUseRecordForm_TRANS_REQUIRED( - useRecord, AcegiHelper.getLoginUserFullName(), + useRecord, operator, useRecord.getDepart(), useRecord.getDepartCoding(), new Date(), CssdUtils.getSystemSetConfigByName("applicationFormType")); @@ -293,7 +413,6 @@ message = e.getMessage(); e.printStackTrace(); //throw new RuntimeException(message); - }finally{ return JSONUtil.buildJsonObject(false , message).toString(); } Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java =================================================================== diff -u -r17517 -r17560 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 17517) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManager.java (.../TousseInstanceManager.java) (revision 17560) @@ -248,15 +248,16 @@ * @param barcode 器械包的条码 * @return 执行结果的json字符串 */ - public String singTousseInstanceByBarcode(String barcode); + public String signTousseInstanceByBarcode(String barcode); + /** * 根据器械包的条码签收器械包,并指定签收人及签收人的科室 * @param barcode 器械包的条码 * @param orgUnitCoding 科室编码 * @param signer 签收人完整名称 * @return */ - public String singTousseInstanceByBarcode(String barcode,String orgUnitCoding,String signer); + public String signTousseInstanceByBarcode(String barcode,String orgUnitCoding,String signer); /** * 批量签收器械包 * @param barcodes Index: ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java =================================================================== diff -u -r17517 -r17560 --- ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 17517) +++ ssts-tousse/src/main/java/com/forgon/disinfectsystem/tousse/toussedefinition/service/TousseInstanceManagerImpl.java (.../TousseInstanceManagerImpl.java) (revision 17560) @@ -2221,15 +2221,15 @@ String locationForDisplay = tousseInstance.getLocationForDisplay(); if (StringUtils.isNotBlank(location) && - !signerOrgUnitCoding.equals(location)) { + !StringUtils.equals(signerOrgUnitCoding , location)) { throw new RuntimeException("该器械包属于" + locationForDisplay + ",不能被签收"); } else { if (StringUtils.isNotBlank(tousseInstance .getSignedUser())) { throw new RuntimeException("该器械包已签收,不能重复签收"); } else { String status = tousseInstance.getStatus(); - if (!TousseInstance.STATUS_SHIPPED.equals(status)) { + if (!tousseInstance.isShipped()) { throw new RuntimeException("器械包状态为" + status + ",不能签收"); } else { return true; @@ -2240,13 +2240,13 @@ } @Override - public String singTousseInstanceByBarcode(String barcode) { + public String signTousseInstanceByBarcode(String barcode) { String currentUserOrgUnitCoding = AcegiHelper .getLoginUser().getCurrentOrgUnitCode(); String loginUserFullName = AcegiHelper .getLoginUserFullName(); - return singTousseInstanceByBarcode(barcode, currentUserOrgUnitCoding, loginUserFullName); + return signTousseInstanceByBarcode(barcode, currentUserOrgUnitCoding, loginUserFullName); } @Override public void batchSignTousseInstance(Collection barcodes,String orgUnitCoding,String signer){ @@ -2266,7 +2266,7 @@ } } @Override - public String singTousseInstanceByBarcode(String barcode, + public String signTousseInstanceByBarcode(String barcode, String orgUnitCoding, String signer) { String msg = "没有找到对应的器械包"; String objStr = ""; Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/mobilenursing/common/service/MobileNursingWebService.java =================================================================== diff -u -r17457 -r17560 --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/mobilenursing/common/service/MobileNursingWebService.java (.../MobileNursingWebService.java) (revision 17457) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/mobilenursing/common/service/MobileNursingWebService.java (.../MobileNursingWebService.java) (revision 17560) @@ -16,14 +16,14 @@ /** * 器械包签收接口 - * @param param 输入参数 如:010000214 + * @param param 输入参数 如:010000214admin * @return {success:true}或{success:false,message:’失败消息’} */ public String signTousse(String param); /** * 扫描条码腕带住院号加载使用记录及已扫描器械包接口 - * @param param 输入参数 如:010000214 + * @param param 输入参数 如:010000214admin * @return */ public String loadDataByHospitalNumber(String param);