Index: ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml
===================================================================
diff -u -r37454 -r37968
--- ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 37454)
+++ ssts-web/src/main/webapp/WEB-INF/spring/applicationContext-disinfectsystem-service.xml (.../applicationContext-disinfectsystem-service.xml) (revision 37968)
@@ -3009,4 +3009,13 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
Index: build.gradle
===================================================================
diff -u -r37726 -r37968
--- build.gradle (.../build.gradle) (revision 37726)
+++ build.gradle (.../build.gradle) (revision 37968)
@@ -601,6 +601,10 @@
//webSocket另一种组件
compile group: 'org.java-websocket', name: 'Java-WebSocket', version: '1.5.3'
+
+ //HL7消息解析
+ compile group: 'ca.uhn.hapi', name: 'hapi-base', version: '2.3'
+ compile group: 'ca.uhn.hapi', name: 'hapi-structures-v24', version: '2.3'
}
// 文件夹的名字必须用斜线结果,否则创建该文件夹不成功
Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/surgeryschedule/service/SurgeryScheduleManagerImpl.java
===================================================================
diff -u
--- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/surgeryschedule/service/SurgeryScheduleManagerImpl.java (revision 0)
+++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/surgeryschedule/service/SurgeryScheduleManagerImpl.java (revision 37968)
@@ -0,0 +1,133 @@
+package com.forgon.disinfectsystem.surgeryschedule.service;
+
+import java.util.Date;
+import java.util.List;
+
+import org.apache.commons.collections4.CollectionUtils;
+import org.apache.commons.lang.StringUtils;
+
+import ca.uhn.hl7v2.AcknowledgmentCode;
+import ca.uhn.hl7v2.DefaultHapiContext;
+import ca.uhn.hl7v2.HapiContext;
+import ca.uhn.hl7v2.model.GenericMessage;
+import ca.uhn.hl7v2.model.Message;
+import ca.uhn.hl7v2.parser.GenericModelClassFactory;
+import ca.uhn.hl7v2.parser.GenericParser;
+import ca.uhn.hl7v2.util.Terser;
+
+import com.forgon.disinfectsystem.entity.operationreservation.SurgerySchedule;
+import com.forgon.exception.SystemException;
+import com.forgon.tools.date.DateTools;
+import com.forgon.tools.hibernate.BasePoManagerImpl;
+
+/**
+ * 手术排班信息的managerGZSZYY-51
+ */
+public class SurgeryScheduleManagerImpl extends BasePoManagerImpl implements SurgeryScheduleManager {
+
+ @Override
+ public String recieveSurgerySchedule(String hl7Str) {
+
+ String resopnce = "";
+ HapiContext context = null;
+ GenericMessage message = null;
+ AcknowledgmentCode theAcknowledgementCode = AcknowledgmentCode.AA;
+ SurgerySchedule surgerySchedule = null;
+ try {
+ //1、解析hl7
+ context = new DefaultHapiContext();
+ context.setModelClassFactory(new GenericModelClassFactory());
+
+ GenericParser parse = context.getGenericParser();
+ message = (GenericMessage) parse.parse(hl7Str);
+
+ Terser terser = new Terser(message);
+ //手术申请单号(his)
+ String surgeryScheduleId = terser.get("/SCH-1");
+ if(StringUtils.isBlank(surgeryScheduleId)){
+ throw new SystemException("手术申请单号不能为空!");
+ }
+ List list = this.getByProperty("surgeryScheduleId", surgeryScheduleId);
+ if(CollectionUtils.isNotEmpty(list)){
+ surgerySchedule = list.get(0);
+ }
+ if(surgerySchedule == null){
+ surgerySchedule = new SurgerySchedule();
+ }
+ surgerySchedule.setSurgeryScheduleId(surgeryScheduleId);
+ //台次
+ String surgeryScheduleTimes = terser.get("/SCH-3");
+ surgerySchedule.setSurgeryScheduleTimes(surgeryScheduleTimes);
+ //手术预约时间
+ String scheduleTimeStr = terser.get("/SCH-11(1)-4");
+ if(StringUtils.isBlank(scheduleTimeStr)){
+ throw new SystemException("手术预约时间不能为空!");
+ }
+ Date scheduleTime = DateTools.coverStrToDate(scheduleTimeStr, "yyyyMMddHHmmss");
+ if(scheduleTime == null){
+ throw new SystemException("手术预约时间格式异常!");
+ }
+ surgerySchedule.setScheduleTime(scheduleTime);
+ //住院号
+ String hospitalNumber = terser.get("/PV1-19");
+ if(StringUtils.isBlank(hospitalNumber)){
+ throw new SystemException("住院号不能为空!");
+ }
+ surgerySchedule.setHospitalNumber(hospitalNumber);
+ //手术名称
+ String surgeryName = terser.get("/AIS-3-2");
+ if(StringUtils.isBlank(surgeryName)){
+ throw new SystemException("手术名称不能为空!");
+ }
+ surgerySchedule.setSurgeryName(surgeryName);
+ //手术记录状态
+ String surgeryStatus = terser.get("AIS-10");
+ if(StringUtils.isBlank(surgeryScheduleId)){
+ throw new SystemException("手术记录状态不能为空!");
+ }
+ surgerySchedule.setSurgeryStatus(surgeryStatus);
+
+ //保存手术排班
+ this.save(surgerySchedule);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ resopnce = "消息接收失败:" + e.getMessage();
+ theAcknowledgementCode = AcknowledgmentCode.AE;
+ } finally {
+ try {
+ if(context != null){
+ context.close();
+ }
+ } catch (Exception e2) {}
+ }
+ return buildAckMessage(message, theAcknowledgementCode, resopnce);
+ }
+
+ /**
+ * 构建HL7返回的消息
+ * @param message
+ * @param theAcknowledgementCode
+ * @param resopnce
+ * @return
+ */
+ private String buildAckMessage(GenericMessage message, AcknowledgmentCode theAcknowledgementCode, String resopnce) {
+ if(message == null){
+ //推送过来的消息不存在时,只返回异常信息,不返回HL7消息
+ return resopnce;
+ }
+ //返回ACK的hl7消息
+ try {
+ Message ackMessage = message.generateACK(theAcknowledgementCode, null);
+ Terser ackTerser = new Terser(ackMessage);
+ ackTerser.set("/MSH-7", DateTools.getCurrentDayByFormat("yyyyMMddHHmmss"));
+ ackTerser.set("/MSH-17", "CHN");
+ ackTerser.set("/MSA-3", resopnce);
+ return ackMessage.encode();
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ return resopnce;
+ }
+
+}
Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/surgeryschedule/service/SurgeryScheduleManager.java
===================================================================
diff -u
--- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/surgeryschedule/service/SurgeryScheduleManager.java (revision 0)
+++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/surgeryschedule/service/SurgeryScheduleManager.java (revision 37968)
@@ -0,0 +1,17 @@
+package com.forgon.disinfectsystem.surgeryschedule.service;
+
+import com.forgon.disinfectsystem.entity.operationreservation.SurgerySchedule;
+import com.forgon.tools.hibernate.BasePoManager;
+
+/**
+ * 手术排班信息的managerGZSZYY-51
+ */
+public interface SurgeryScheduleManager extends BasePoManager {
+
+ /**
+ * 接收并解析保存手术排班信息
+ * @param request
+ */
+ public String recieveSurgerySchedule(String request);
+
+}
Index: ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/surgeryschedule/controller/SurgeryScheduleController.java
===================================================================
diff -u
--- ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/surgeryschedule/controller/SurgeryScheduleController.java (revision 0)
+++ ssts-recyclingapplication/src/main/java/com/forgon/disinfectsystem/surgeryschedule/controller/SurgeryScheduleController.java (revision 37968)
@@ -0,0 +1,64 @@
+package com.forgon.disinfectsystem.surgeryschedule.controller;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+
+import javax.servlet.http.HttpServletRequest;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+import com.forgon.directory.acegi.tools.AcegiHelper;
+import com.forgon.disinfectsystem.surgeryschedule.service.SurgeryScheduleManager;
+import com.forgon.log.model.Log;
+import com.forgon.log.service.LogManager;
+
+/**
+ * 接收推送手术排班信息的接口地址GZSZYY-51
+ */
+@RestController
+@RequestMapping(value="/buttjoint/buttjointSurgeryScheduleController", produces = "application/json;charset=UTF-8")
+public class SurgeryScheduleController {
+
+ @Autowired
+ private SurgeryScheduleManager surgeryScheduleManager;
+
+ @Autowired
+ private LogManager appLogManager;
+
+ @RequestMapping(value = "/recieveSurgerySchedule",method = RequestMethod.POST)
+ public String recieveSurgerySchedule(HttpServletRequest request){
+ String result = "消息接收成功";
+ BufferedReader streamReader = null;
+ InputStreamReader inputStreamReader = null;
+ try {
+ inputStreamReader = new InputStreamReader(request.getInputStream(), "UTF-8");
+ streamReader = new BufferedReader(inputStreamReader);
+ StringBuilder requestStrBuilder = new StringBuilder();
+ String inputStr = null;
+ while ((inputStr = streamReader.readLine()) != null){
+ requestStrBuilder.append(inputStr+"\r");
+ }
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_WRITE, "调用手术排班接收接口,请求参数:" + requestStrBuilder.toString());
+ result = surgeryScheduleManager.recieveSurgerySchedule(requestStrBuilder.toString());
+ } catch (Exception e) {
+ result = "消息接收失败:" + e.getMessage();
+ } finally {
+ if(streamReader != null){
+ try {
+ streamReader.close();
+ } catch (Exception e) {}
+ }
+ if(inputStreamReader != null){
+ try {
+ inputStreamReader.close();
+ } catch (Exception e) {}
+ }
+ }
+ appLogManager.saveLog(AcegiHelper.getLoginUser(), "调用接口" , Log.TYPE_WRITE, "调用手术排班接收接口,返回参数:" + result);
+ return result;
+ }
+
+}
Index: ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/operationreservation/SurgerySchedule.java
===================================================================
diff -u
--- ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/operationreservation/SurgerySchedule.java (revision 0)
+++ ssts-basedata/src/main/java/com/forgon/disinfectsystem/entity/operationreservation/SurgerySchedule.java (revision 37968)
@@ -0,0 +1,151 @@
+package com.forgon.disinfectsystem.entity.operationreservation;
+
+import java.util.Date;
+
+import javax.persistence.Entity;
+import javax.persistence.GeneratedValue;
+import javax.persistence.GenerationType;
+import javax.persistence.Id;
+import javax.persistence.Table;
+
+import org.hibernate.annotations.Cache;
+import org.hibernate.annotations.CacheConcurrencyStrategy;
+import org.hibernate.annotations.DynamicInsert;
+import org.hibernate.annotations.DynamicUpdate;
+
+/**
+ * 手术排班
+ * 获取到的手术排班信息当前只用于实时数据库大屏显示,暂无其他用途GZSZYY-51
+ */
+@Entity
+@DynamicInsert(false)
+@DynamicUpdate(true)
+@Table(name = "SurgerySchedule")
+@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
+public class SurgerySchedule {
+
+ private Long id;
+
+ /**
+ * 手术申请单号
+ */
+ private String surgeryScheduleId;
+
+ /**
+ * 台次
+ */
+ private String surgeryScheduleTimes;
+
+ /**
+ * 手术预约时间
+ */
+ private Date scheduleTime;
+
+ /**
+ * 住院号
+ */
+ private String hospitalNumber;
+
+ /**
+ * 手术名称
+ */
+ private String surgeryName;
+
+ /**
+ * 手术状态
+ */
+ private String surgeryStatus;
+
+ /**
+ * 未安排
+ */
+ public final static String SURGERY_STATUS_WAITLIST = "Waitlist";
+
+ /**
+ * 已安排
+ */
+ public final static String SURGERY_STATUS_BOOKED = "Booked";
+
+ /**
+ * 已完成
+ */
+ public final static String SURGERY_STATUS_COMPLETE = "Complete";
+
+ /**
+ * 病区取消
+ */
+ public final static String SURGERY_STATUS_CANCELLED = "Cancelled";
+
+ /**
+ * 手术室取消
+ */
+ public final static String SURGERY_STATUS_DELETED = "Deleted";
+
+ @Id
+ @GeneratedValue(strategy = GenerationType.AUTO)
+ public Long getId() {
+ return id;
+ }
+
+ public void setId(Long id) {
+ this.id = id;
+ }
+
+ public String getHospitalNumber() {
+ return hospitalNumber;
+ }
+
+ public void setHospitalNumber(String hospitalNumber) {
+ this.hospitalNumber = hospitalNumber;
+ }
+
+ public String getSurgeryScheduleId() {
+ return surgeryScheduleId;
+ }
+
+ public void setSurgeryScheduleId(String surgeryScheduleId) {
+ this.surgeryScheduleId = surgeryScheduleId;
+ }
+
+ public String getSurgeryScheduleTimes() {
+ return surgeryScheduleTimes;
+ }
+
+ public void setSurgeryScheduleTimes(String surgeryScheduleTimes) {
+ this.surgeryScheduleTimes = surgeryScheduleTimes;
+ }
+
+ public Date getScheduleTime() {
+ return scheduleTime;
+ }
+
+ public void setScheduleTime(Date scheduleTime) {
+ this.scheduleTime = scheduleTime;
+ }
+
+ public String getSurgeryName() {
+ return surgeryName;
+ }
+
+ public void setSurgeryName(String surgeryName) {
+ this.surgeryName = surgeryName;
+ }
+
+ public String getSurgeryStatus() {
+ return surgeryStatus;
+ }
+
+ public void setSurgeryStatus(String surgeryStatus) {
+ this.surgeryStatus = surgeryStatus;
+ }
+
+ @Override
+ public String toString() {
+ return "SurgerySchedule [id=" + id + ", surgeryScheduleId="
+ + surgeryScheduleId + ", surgeryScheduleTimes="
+ + surgeryScheduleTimes + ", scheduleTime=" + scheduleTime
+ + ", hospitalNumber=" + hospitalNumber + ", surgeryName="
+ + surgeryName + ", surgeryStatus=" + surgeryStatus + "]";
+ }
+
+}