Index: ssts-web/src/main/resources/spring/projects/cszxyy/applicationContext-disinfectsystem-cxf-syncService.xml =================================================================== diff -u --- ssts-web/src/main/resources/spring/projects/cszxyy/applicationContext-disinfectsystem-cxf-syncService.xml (revision 0) +++ ssts-web/src/main/resources/spring/projects/cszxyy/applicationContext-disinfectsystem-cxf-syncService.xml (revision 17457) @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + \ No newline at end of file Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/mobilenursing/common/service/MobileNursingWebServiceImpl.java =================================================================== diff -u --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/mobilenursing/common/service/MobileNursingWebServiceImpl.java (revision 0) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/mobilenursing/common/service/MobileNursingWebServiceImpl.java (revision 17457) @@ -0,0 +1,302 @@ +package com.forgon.disinfectsystem.webservice.mobilenursing.common.service; + +import java.util.Date; +import java.util.List; + +import javax.jws.WebService; + +import org.apache.commons.collections4.CollectionUtils; +import org.apache.commons.lang.StringUtils; + +import net.sf.json.JSONArray; +import net.sf.json.JSONObject; +import net.sf.json.xml.XMLSerializer; +import jxl.common.Logger; + +import com.forgon.directory.acegi.tools.AcegiHelper; +import com.forgon.directory.model.BarcodeDevice; +import com.forgon.disinfectsystem.barcode.service.BarcodeManager; +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.DisposableGoodsBatch; +import com.forgon.disinfectsystem.entity.assestmanagement.ExpensiveDisposablegoods; +import com.forgon.disinfectsystem.entity.basedatamanager.toussedefinition.TousseInstance; +import com.forgon.disinfectsystem.entity.idcardinstance.IDCardInstance; +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.disinfectsystem.useRecord.service.UseRecordManager; +import com.forgon.tools.db.DatabaseUtil; +import com.forgon.tools.hibernate.ObjectDao; +import com.forgon.tools.json.JSONUtil; + +/** + * 移动护理相关接口 + * 1. 器械包签收接口 + * 2. 扫描住院号加载使用记录及已扫描器械包接口 + * 3. 扫描器械包更新使用记录接口 + * 4. 使用记录审核并转申请单接口 + * @author shuyongfu + * @since date:2017-03-20 + */ +@WebService(endpointInterface = "com.forgon.disinfectsystem.webservice.mobilenursing.common.service.MobileNursingWebService", serviceName = "/mobileNursingWebService") +public class MobileNursingWebServiceImpl implements MobileNursingWebService { + + private Logger logger = Logger.getLogger(this.getClass()); + + private ObjectDao objectDao; + + private TousseInstanceManager tousseInstanceManager; + + private UseRecordManager useRecordManager; + + private BarcodeManager barcodeManager; + + private DataSynchronizationManager dataSynchronizationManager; + + public void setTousseInstanceManager(TousseInstanceManager tousseInstanceManager) { + this.tousseInstanceManager = tousseInstanceManager; + } + + public void setObjectDao(ObjectDao objectDao) { + this.objectDao = objectDao; + } + + public void setUseRecordManager(UseRecordManager useRecordManager) { + this.useRecordManager = useRecordManager; + } + + public void setBarcodeManager(BarcodeManager barcodeManager) { + this.barcodeManager = barcodeManager; + } + + @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")); + JSONObject jsonResult = JSONObject.fromObject(result); + return JSONUtil.buildJsonObject(jsonResult.optBoolean("success"), jsonResult.optString("message")).toString(); + }catch(Exception e){ + e.printStackTrace(); + return JSONUtil.buildJsonObject(false, e.getCause().getMessage()).toString(); + } + } + + @Override + public String loadDataByHospitalNumber(String param) { + logger.debug("loadDataByHospitalNumber param=" + param); + try{ + XMLSerializer xmlSerializer = new XMLSerializer(); + JSONObject jsonObject = (JSONObject)xmlSerializer.read(param); + String hospitalNumber = jsonObject.optString("hospitalNumber"); + UseRecord useRecord = null; + List list = objectDao.findBySql(UseRecord.class.getSimpleName(), + "where hospitalNum='" + hospitalNumber + "' and status='" + UseRecord.STATUS_UNAUDITED + "' order by id desc"); + if(CollectionUtils.isEmpty(list)){ + PatientInfoVO[] vos = dataSynchronizationManager.findPatientInfoByHospitalNum(hospitalNumber); + if(vos == null || vos.length == 0){ + return JSONUtil.buildJsonObject(false, "未找到住院号为" + hospitalNumber + "的使用记录及病人信息").toString(); + } + PatientInfoVO vo = vos[vos.length - 1]; + useRecord = new UseRecord(); + useRecord.setBedNumber(vo.getBedNumber()); + useRecord.setCircuitNurse(vo.getCircuitNurse()); + useRecord.setDepart(AcegiHelper.getCurrentOrgUnitName()); + useRecord.setDepartCoding(AcegiHelper.getCurrentOrgUnitName()); + useRecord.setDoctorName(vo.getDoctorName()); + useRecord.setEditTime(new Date()); + useRecord.setEnteringDate(useRecord.getEditTime()); + useRecord.setHospitalNum(hospitalNumber); + useRecord.setOperation(vo.getOperation()); + useRecord.setOperationRoom(vo.getOpRoomId()); + useRecord.setOperator(AcegiHelper.getLoginUserFullName()); + useRecord.setPatientAge(vo.getPatientAge()); + useRecord.setPatientIDCard(vo.getPatientIDCard()); + useRecord.setPatientName(vo.getPatientName()); + useRecord.setPatientSex(vo.getPatientSex()); + useRecord.setRemark(vo.getRemark()); + useRecord.setRoomNumber(vo.getRoomNumber()); + useRecord.setSpecialInfection(vo.getSpecialInfection()); + useRecord.setStatus(UseRecord.STATUS_UNAUDITED); + useRecord.setStatusSequence(UseRecord.STATUS_SEQ_UNAUDITED); + useRecord.setVisitId(vo.getVisitId()); + useRecord.setWashHandNurse(vo.getWashHandNurse()); + objectDao.saveOrUpdate(useRecord); + }else{ + useRecord = list.get(0); + } + + + JSONObject jsonResult = new JSONObject(); + jsonResult.put("success", true); + jsonResult.put("useRecordId",useRecord.getId()); + jsonResult.put("hospitalNumber",useRecord.getHospitalNum()); + jsonResult.put("patientName",useRecord.getPatientName()); + jsonResult.put("patientAge",useRecord.getPatientAge()); + jsonResult.put("patientSex",useRecord.getPatientSex()); + jsonResult.put("patientIDCard",useRecord.getPatientIDCard()); + jsonResult.put("doctorName",useRecord.getDoctorName()); + jsonResult.put("operation",useRecord.getOperation()); + //jsonResult.put("operationTime",useRecord.get); + //jsonResult.put("patientArea",useRecord.getpa); + jsonResult.put("roomNumber",useRecord.getRoomNumber()); + jsonResult.put("bedNumber",useRecord.getBedNumber()); + //jsonResult.put("ascriptionDepartment",useRecord.geta); + jsonResult.put("washHandNurse",useRecord.getWashHandNurse()); + jsonResult.put("circuitNurse",useRecord.getCircuitNurse()); + jsonResult.put("remark",useRecord.getRemark()); + + JSONArray jsonArray = new JSONArray(); + + List tousseInstanceList = useRecord.getTousseInstanceList(objectDao); + List disposableGoodsList = useRecord.getDiposableGoodsItems(); + if(CollectionUtils.isNotEmpty(tousseInstanceList)){ + for(TousseInstance tousseInstance : tousseInstanceList){ + JSONObject itemJsonObject = new JSONObject(); + itemJsonObject.put("tousseName",tousseInstance.getTousseName()); + itemJsonObject.put("barcode",tousseInstance.getBarcode()); + itemJsonObject.put("amount",1); + jsonArray.add(itemJsonObject); + } + } + + if(CollectionUtils.isNotEmpty(disposableGoodsList)){ + JSONObject itemJsonObject = new JSONObject(); + for(UseDiposableGoodsItem useDiposableGoodsItem : disposableGoodsList){ + itemJsonObject.put("tousseName",useDiposableGoodsItem.getName()); + itemJsonObject.put("barcode",useDiposableGoodsItem.getBarcode()); + itemJsonObject.put("amount",useDiposableGoodsItem.getAmount()); + jsonArray.add(itemJsonObject); + } + } + + jsonResult.put("tousseList",jsonArray); + + return jsonResult.toString(); + }catch(Exception e){ + e.printStackTrace(); + return JSONUtil.buildJsonObject(false, e.getCause().getMessage()).toString(); + } + } + + @Override + public String submitUseRecordByBarcode(String param) { + logger.debug("submitUseRecordByBarcode param=" + param); + try{ + XMLSerializer xmlSerializer = new XMLSerializer(); + JSONObject jsonObject = (JSONObject)xmlSerializer.read(param); + UseRecord useRecord = null; + String useRecordId = jsonObject.optString("useRecordId"); + if(DatabaseUtil.isPoIdValid(useRecordId)){ + useRecord = useRecordManager.getUseRecordById(useRecordId); + if(useRecord == null){ + return JSONUtil.buildJsonObject(false, "未找到id为" + useRecordId + "的使用记录").toString(); + } + } + + //条码 + String barcode = jsonObject.optString("barcode"); + if(StringUtils.isNotBlank(barcode)){ + BarcodeDevice bd = barcodeManager.getBarcodeByBarcode(barcode); + if(bd == null){ + // + return JSONUtil.buildJsonObject(false, "未找到条码为" + barcode + "的信息").toString(); + } + + if(bd instanceof TousseInstance || bd instanceof IDCardInstance + || bd instanceof ExpensiveDisposablegoods || bd instanceof DisposableGoodsBatch){ + 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); + }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); + }else{ + return JSONUtil.buildJsonObject(false, "条码为" + barcode + "的器械包状态为" + ti.getStatus() + ",不能登记使用记录").toString(); + } + } + + if(bd instanceof ExpensiveDisposablegoods){ + ExpensiveDisposablegoods ed = (ExpensiveDisposablegoods)bd; + if(ed.delivered()){ + ed.setStatus(ExpensiveDisposablegoods.STATUS_USED); + ed.setUseRecord(useRecord); + objectDao.saveOrUpdate(ed); + } + } + + if(bd instanceof DisposableGoodsBatch){ + DisposableGoodsBatch dgb = (DisposableGoodsBatch)bd; + UseDiposableGoodsItem udgi = new UseDiposableGoodsItem(); + udgi.setAmount(jsonObject.optInt("amount")); + udgi.setBarcode(barcode); + udgi.setBatchNo(dgb.getBatchNumber()); + udgi.setDisposableGoodsId(dgb.getDiposableGoods().getId()); + udgi.setName(CssdUtils.getDiposableGoodsName(dgb.getDiposableGoods())); + udgi.setValidUntil(dgb.getExpDateStr()); + objectDao.saveOrUpdate(udgi); + } + + JSONObject result = new JSONObject(); + result.put("success", true); + result.put("useRecordId", useRecord.getId()); + return result.toString(); + } + // + return JSONUtil.buildJsonObject(false, "只能登记器械包或标识牌或一次性物品或高值耗材的条码").toString(); + }else{ + // + return JSONUtil.buildJsonObject(false, "未找到id为" + useRecordId + "的使用记录").toString(); + } + + }catch(Exception e){ + return JSONUtil.buildJsonObject(false, e.getCause().getMessage()).toString(); + } + } + + @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); + UseRecord useRecord = useRecordManager.getUseRecordById(jsonObject.optString("useRecordId")); + useRecordManager.saveAndReviewAndConvertUseRecordForm_TRANS_REQUIRED( + useRecord, AcegiHelper.getLoginUserFullName(), + useRecord.getDepart(), useRecord.getDepartCoding(), + new Date(), CssdUtils.getSystemSetConfigByName("applicationFormType")); + + return JSONUtil.buildJsonObject(true).toString(); + }catch(Exception e){ + message = e.getMessage(); + e.printStackTrace(); + //throw new RuntimeException(message); + }finally{ + return JSONUtil.buildJsonObject(false , message).toString(); + } + + } + +} Index: ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/mobilenursing/common/service/MobileNursingWebService.java =================================================================== diff -u --- ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/mobilenursing/common/service/MobileNursingWebService.java (revision 0) +++ ssts-webservice/src/main/java/com/forgon/disinfectsystem/webservice/mobilenursing/common/service/MobileNursingWebService.java (revision 17457) @@ -0,0 +1,44 @@ +package com.forgon.disinfectsystem.webservice.mobilenursing.common.service; + +import javax.jws.WebService; + +/** + * 移动护理相关接口 + * 1. 器械包签收接口 + * 2. 扫描住院号加载使用记录及已扫描器械包接口 + * 3. 扫描器械包更新使用记录接口 + * 4. 使用记录审核并转申请单接口 + * @author shuyongfu + * @since date:2017-03-20 + */ +@WebService +public interface MobileNursingWebService { + + /** + * 器械包签收接口 + * @param param 输入参数 如:010000214 + * @return {success:true}或{success:false,message:’失败消息’} + */ + public String signTousse(String param); + + /** + * 扫描条码腕带住院号加载使用记录及已扫描器械包接口 + * @param param 输入参数 如:010000214 + * @return + */ + public String loadDataByHospitalNumber(String param); + + /** + * 扫描器械包更新使用记录接口 + * @param param 输入参数 如:11101000021410 + * @return + */ + public String submitUseRecordByBarcode(String param); + + /** + * 使用记录审核并转申请单接口 + * @param param 输入参数 如:111 + * @return + */ + public String reviewAndConvertUseRecord(String param); +}