diff --git a/blood_bus/src/main/java/com/czblood/bus/mapper/XkReactionMapper.java b/blood_bus/src/main/java/com/czblood/bus/mapper/XkReactionMapper.java new file mode 100644 index 0000000..dc7add2 --- /dev/null +++ b/blood_bus/src/main/java/com/czblood/bus/mapper/XkReactionMapper.java @@ -0,0 +1,7 @@ +package com.czblood.bus.mapper; + +import org.apache.ibatis.annotations.Param; + +public interface XkReactionMapper { + int queryCount(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo); +} diff --git a/blood_bus/src/main/java/com/czblood/bus/pojo/XkMsgMain.java b/blood_bus/src/main/java/com/czblood/bus/pojo/XkMsgMain.java index 7ad3946..533002e 100644 --- a/blood_bus/src/main/java/com/czblood/bus/pojo/XkMsgMain.java +++ b/blood_bus/src/main/java/com/czblood/bus/pojo/XkMsgMain.java @@ -42,4 +42,7 @@ public class XkMsgMain { private Date write_Date; @ApiModelProperty("消息ID") private Integer msgid; + + private Date sWriteDate; + private Date eWriteDate; } diff --git a/blood_bus/src/main/java/com/czblood/bus/pojo/XkReaction.java b/blood_bus/src/main/java/com/czblood/bus/pojo/XkReaction.java new file mode 100644 index 0000000..3df857e --- /dev/null +++ b/blood_bus/src/main/java/com/czblood/bus/pojo/XkReaction.java @@ -0,0 +1,32 @@ +package com.czblood.bus.pojo; + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.math.BigDecimal; +import java.util.Date; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class XkReaction { + private String bill_no; + private String hos_id; + private String apply_no; + private String out_id; + private String blood_no; + private Date transfuse_date; + private String transfuse_medic; + private String transfuse_reaction; + private Date occur_time; + private String treatment; + private String treatment_dept; + private String remark; + private String transfuse_mode; + private BigDecimal transfuse_num; + private String out_sign; + private Date last_modified; + private String check_sign; + private String product_no; +} diff --git a/blood_bus/src/main/java/com/czblood/bus/websocket/ParamExtra.java b/blood_bus/src/main/java/com/czblood/bus/websocket/ParamExtra.java new file mode 100644 index 0000000..78496a6 --- /dev/null +++ b/blood_bus/src/main/java/com/czblood/bus/websocket/ParamExtra.java @@ -0,0 +1,14 @@ +package com.czblood.bus.websocket; + +import io.swagger.annotations.ApiModel; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +@Data +@AllArgsConstructor +@NoArgsConstructor +@ApiModel("websocket返回数据集合") +public class ParamExtra { + private Integer msgId; +} diff --git a/blood_bus/src/main/java/com/czblood/bus/websocket/SendMessageUtil.java b/blood_bus/src/main/java/com/czblood/bus/websocket/SendMessageUtil.java index b477295..b1cf194 100644 --- a/blood_bus/src/main/java/com/czblood/bus/websocket/SendMessageUtil.java +++ b/blood_bus/src/main/java/com/czblood/bus/websocket/SendMessageUtil.java @@ -27,10 +27,10 @@ public class SendMessageUtil { @Resource XkMsgDetailMapper xkMsgDetailMapper; - public void saveMessage(String billNo,String content) { + public int saveMessage(String billNo,String content) { XkTransfuseApply xkTransfuseApply = xkTransfuseApplyMapper.queryOne(billNo); - if (xkTransfuseApply == null) return ; + if (xkTransfuseApply == null) return -1; Date currentTimeDate = bloodBankUtil.getCurrentTimeDate(); @@ -55,14 +55,16 @@ public class SendMessageUtil { xkMsgDetailTemp.setMsg_Body(content); xkMsgDetailTemp.setAccept_Dept("输血科"); xkMsgDetailTemp.setSend_Dept(xkTransfuseApply.getDept_id()); - SpringUtils.getBean(SendMessageUtil.class).saveData(xkMsgMainTemp,xkMsgDetailTemp); + //返回消息ID给前端 + return SpringUtils.getBean(SendMessageUtil.class).saveData(xkMsgMainTemp,xkMsgDetailTemp); } @Transactional(rollbackFor = Exception.class) - public void saveData(XkMsgMain xkMsgMain, XkMsgDetail xkMsgDetail) { + public int saveData(XkMsgMain xkMsgMain, XkMsgDetail xkMsgDetail) { xkMsgMainMapper.insert(xkMsgMain); xkMsgDetail.setMsgid(xkMsgMain.getMsgid()); xkMsgDetailMapper.insert(xkMsgDetail); + return xkMsgMain.getMsgid(); } diff --git a/blood_bus/src/main/java/com/czblood/bus/websocket/WebSocketServer.java b/blood_bus/src/main/java/com/czblood/bus/websocket/WebSocketServer.java index 9241edf..b4673be 100644 --- a/blood_bus/src/main/java/com/czblood/bus/websocket/WebSocketServer.java +++ b/blood_bus/src/main/java/com/czblood/bus/websocket/WebSocketServer.java @@ -2,6 +2,8 @@ package com.czblood.bus.websocket; import cn.hutool.json.JSONObject; import cn.hutool.json.JSONUtil; +import com.czblood.bus.mapper.XkMsgMainMapper; +import com.czblood.bus.pojo.XkMsgMain; import com.czblood.bus.pojo.websocket.WebSocketParam; import com.czblood.bus.utils.BloodBankUtil; import com.czblood.common.core.domain.entity.SysDept; @@ -194,13 +196,18 @@ public class WebSocketServer { } //保存消息数据,写一条消息记录 - SpringUtils.getBean(SendMessageUtil.class).saveMessage(billNo,content); + int msgId = SpringUtils.getBean(SendMessageUtil.class).saveMessage(billNo,content); switch (type) { //输血申请单保存通知 case APPLY_NOTICE: //需要通知整个输血科人员 + ParamExtra paramExtra = new ParamExtra(); + paramExtra.setMsgId(msgId); + msg.setExtra(paramExtra); + XkMsgMain xkMsgMain = SpringUtils.getBean(XkMsgMainMapper.class).queryOne(msgId); SysDept sysDept = new SysDept(); + msg.setTitle(xkMsgMain.getMsg_Title()); sysDept.setDeptType("002"); //输血科室 List sysDeptList = SpringUtils.getBean(SysDeptMapper.class).selectDeptList(sysDept); for (SysDept dept : sysDeptList) { diff --git a/blood_bus/src/main/java/com/czblood/bus/websocket/WsMessage.java b/blood_bus/src/main/java/com/czblood/bus/websocket/WsMessage.java index 068628d..3d8977d 100644 --- a/blood_bus/src/main/java/com/czblood/bus/websocket/WsMessage.java +++ b/blood_bus/src/main/java/com/czblood/bus/websocket/WsMessage.java @@ -3,6 +3,7 @@ package com.czblood.bus.websocket; import lombok.Data; import java.io.Serializable; +import java.util.Date; /** * WebSocket 统一消息协议。 @@ -34,9 +35,15 @@ public class WsMessage implements Serializable { /** 消息内容 */ private String content; + /** 消息标题 */ + private String title; /** 扩展数据,不同业务传不同结构 */ private Object data; + /** 返回数据 */ + private ParamExtra extra; + /** 消息发送时间 */ + private Date timestamp; /** 判断是否群发 */ // public boolean isBroadcast() { diff --git a/blood_bus/src/main/resources/mapper/XkMsgMainMapper.xml b/blood_bus/src/main/resources/mapper/XkMsgMainMapper.xml index 679638d..e5d6ea6 100644 --- a/blood_bus/src/main/resources/mapper/XkMsgMainMapper.xml +++ b/blood_bus/src/main/resources/mapper/XkMsgMainMapper.xml @@ -35,6 +35,7 @@ read_Flag = #{read_Flag}, send_Flag = #{send_Flag}, accept_Flag = #{accept_Flag}, + Msg_Type = #{msg_Type} where msgid = #{msgid} @@ -53,6 +54,8 @@ and msg_Type = #{msg_Type} and msg_Kind = #{msg_Kind} and msgid = #{msgid} + = #{sWriteDate} ]]> + + select count(*) from xk_reaction where blood_no = #{bloodNo} and product_no = #{productNo} + + \ No newline at end of file diff --git a/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/controller/MsgController.java b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/controller/MsgController.java index ebbfe33..94f0b88 100644 --- a/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/controller/MsgController.java +++ b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/controller/MsgController.java @@ -1,18 +1,19 @@ package com.czblood.busBloodbank.controller; import com.czblood.bus.pojo.XkMsgMain; +import com.czblood.busBloodbank.pojo.DTO.MsgDTO; import com.czblood.busBloodbank.pojo.VO.MsgVO; import com.czblood.busBloodbank.service.MsgService; import com.czblood.common.core.controller.BaseController; import com.czblood.common.core.domain.Result; import com.czblood.common.core.page.TableDataInfo; import io.swagger.annotations.Api; -import io.swagger.annotations.ApiModelProperty; import io.swagger.annotations.ApiOperation; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.List; +import java.util.Map; @Api(tags = "消息系统") @RestController @@ -23,10 +24,10 @@ public class MsgController extends BaseController { MsgService msgService; @ApiOperation("查询消息列表") - @PostMapping("/queryMsgList") - public TableDataInfo queryMsgList(@RequestBody XkMsgMain xkMsgMain){ + @GetMapping("/queryMsgList") + public TableDataInfo queryMsgList(XkMsgMain xkMsgMain){ startPage(); - List msgMainList = msgService.queryMsgList(xkMsgMain); + List> msgMainList = msgService.queryMsgList(xkMsgMain); return getDataTable(msgMainList); } @@ -36,7 +37,7 @@ public class MsgController extends BaseController { return msgService.queryOne(msgId); } - @ApiModelProperty("获取未读消息数量") + @ApiOperation("获取未读消息数量") @GetMapping("/queryNoReadCount") public Result queryNoReadCount(){ return msgService.queryNoReadCount(); diff --git a/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/mapper/BackinMapper.java b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/mapper/BackinMapper.java index d1fddc1..1515e0c 100644 --- a/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/mapper/BackinMapper.java +++ b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/mapper/BackinMapper.java @@ -3,8 +3,13 @@ package com.czblood.busBloodbank.mapper; import com.czblood.bus.pojo.XkOutDetail; import org.apache.ibatis.annotations.Param; +import java.util.Date; import java.util.List; +import java.util.Map; +import java.util.Objects; public interface BackinMapper { List queryXkOutDetailList(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo); + Date queryOutMainDate(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo); + List> queryPatientInfo(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo); } diff --git a/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/mapper/MsgMapper.java b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/mapper/MsgMapper.java new file mode 100644 index 0000000..d43101b --- /dev/null +++ b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/mapper/MsgMapper.java @@ -0,0 +1,10 @@ +package com.czblood.busBloodbank.mapper; + +import com.czblood.bus.pojo.XkMsgMain; + +import java.util.List; +import java.util.Map; + +public interface MsgMapper { + List> queryMapList(XkMsgMain xkMsgMain); +} diff --git a/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/pojo/DTO/BackinDTO.java b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/pojo/DTO/BackinDTO.java new file mode 100644 index 0000000..335d537 --- /dev/null +++ b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/pojo/DTO/BackinDTO.java @@ -0,0 +1,17 @@ +package com.czblood.busBloodbank.pojo.DTO; + +import com.czblood.bus.pojo.XkBloodInfo; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.NoArgsConstructor; + +import java.util.List; +import java.util.Map; + +@Data +@AllArgsConstructor +@NoArgsConstructor +public class BackinDTO { + private List> patientInfoList; + private XkBloodInfo xkBloodInfo; +} diff --git a/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/MsgService.java b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/MsgService.java index fe0d9f3..b0f61d5 100644 --- a/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/MsgService.java +++ b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/MsgService.java @@ -1,13 +1,15 @@ package com.czblood.busBloodbank.service; import com.czblood.bus.pojo.XkMsgMain; +import com.czblood.busBloodbank.pojo.DTO.MsgDTO; import com.czblood.busBloodbank.pojo.VO.MsgVO; import com.czblood.common.core.domain.Result; import java.util.List; +import java.util.Map; public interface MsgService { - List queryMsgList(XkMsgMain xkMsgMain); + List> queryMsgList(XkMsgMain xkMsgMain); Result queryOne(int msgId); Result updateFlag(MsgVO msgVO); Result queryNoReadCount(); diff --git a/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/impl/BackinServiceImpl.java b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/impl/BackinServiceImpl.java index f29257e..ace77f4 100644 --- a/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/impl/BackinServiceImpl.java +++ b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/impl/BackinServiceImpl.java @@ -1,16 +1,20 @@ package com.czblood.busBloodbank.service.impl; -import com.czblood.bus.mapper.XkOutDetailMapper; +import cn.hutool.core.date.DateUtil; +import com.czblood.bus.mapper.XkReactionMapper; import com.czblood.bus.pojo.XkBloodInfo; import com.czblood.bus.pojo.XkOutDetail; import com.czblood.bus.utils.BloodBankUtil; import com.czblood.busBloodbank.mapper.BackinMapper; +import com.czblood.busBloodbank.pojo.DTO.BackinDTO; import com.czblood.busBloodbank.service.BackinService; import com.czblood.common.core.domain.Result; import org.springframework.stereotype.Service; import javax.annotation.Resource; +import java.util.Date; import java.util.List; +import java.util.Map; @Service public class BackinServiceImpl implements BackinService { @@ -19,6 +23,8 @@ public class BackinServiceImpl implements BackinService { BloodBankUtil bloodBankUtil; @Resource BackinMapper backinMapper; + @Resource + XkReactionMapper xkReactionMapper; @Override public Result queryBloodInfo(String bloodNo, String productNo) { @@ -38,6 +44,19 @@ public class BackinServiceImpl implements BackinService { break; } - return null; + String bloodSort = BloodBankUtil.isBank(xkBloodInfo.getBlood_sort()); + if(bloodSort.equals("Z")) return new Result("-1","该血液为自体血。不可在这操作!"); + int count = xkReactionMapper.queryCount(bloodNo, productNo); + if(count > 0) return new Result("-1","该血液已经登记了输血反应,不可在这操作!"); + Date outDate = backinMapper.queryOutMainDate(bloodNo, productNo); + //控制临床发血后的可退血时间,单位分钟 + String tssjsz = bloodBankUtil.getParameterValue("TSSJSZ"); + Date backinDate = DateUtil.offsetMinute(outDate,Integer.parseInt(tssjsz)); + if(bloodBankUtil.getCurrentTimeDate().compareTo(backinDate) > 0) return new Result("-1","该血液已经超出可退血时间范围,不可退血!"); + List> patientInfoList = backinMapper.queryPatientInfo(bloodNo, productNo); + BackinDTO backinDTO = new BackinDTO(); + backinDTO.setXkBloodInfo(xkBloodInfo); + backinDTO.setPatientInfoList(patientInfoList); + return new Result("0","操作成功",backinDTO); } } diff --git a/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/impl/BloodOutServiceImpl.java b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/impl/BloodOutServiceImpl.java index 0917ace..d4b728b 100644 --- a/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/impl/BloodOutServiceImpl.java +++ b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/impl/BloodOutServiceImpl.java @@ -10,6 +10,7 @@ import com.czblood.bus.utils.BloodBankUtil; import com.czblood.bus.utils.BloodInterfaceUtil; import com.czblood.bus.utils.ReportUtil; import com.czblood.bus.websocket.MsgType; +import com.czblood.bus.websocket.ParamExtra; import com.czblood.bus.websocket.WebSocketServer; import com.czblood.bus.websocket.WsMessage; import com.czblood.busBloodbank.mapper.BloodOutMapper; @@ -492,7 +493,7 @@ public class BloodOutServiceImpl implements BloodOutService { xkMsgDetailTemp.setMsg_Body(msgBody); xkMsgDetailTemp.setAccept_Dept(xkOutMain.getDept_id()); xkMsgDetailTemp.setSend_Dept("输血科"); - bloodOutUtil.updateNotifyTime(xkOutMainTemp,xkMsgMainTemp,xkMsgDetailTemp); + int msgId = bloodOutUtil.updateNotifyTime(xkOutMainTemp,xkMsgMainTemp,xkMsgDetailTemp); //发送消息 //取血通知,传入的人,是取血人 ,但是我们需要通知这个取血人所对应的整个科室,比较合理 SysUser sysUserQuery = new SysUser(); @@ -501,6 +502,8 @@ public class BloodOutServiceImpl implements BloodOutService { for (SysUser sysUser : sysUserList) { String userName = sysUser.getUserName(); WsMessage msg = new WsMessage(); + ParamExtra paramExtra = new ParamExtra(); + paramExtra.setMsgId(msgId); WebSocketServer.sendMsg(userName,msg); } return new Result("0","操作成功"); diff --git a/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/impl/MsgServiceImpl.java b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/impl/MsgServiceImpl.java index 4053d73..df5a1ac 100644 --- a/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/impl/MsgServiceImpl.java +++ b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/service/impl/MsgServiceImpl.java @@ -5,6 +5,7 @@ import com.czblood.bus.mapper.XkMsgMainMapper; import com.czblood.bus.pojo.XkMsgDetail; import com.czblood.bus.pojo.XkMsgMain; import com.czblood.bus.utils.BloodBankUtil; +import com.czblood.busBloodbank.mapper.MsgMapper; import com.czblood.busBloodbank.pojo.DTO.MsgDTO; import com.czblood.busBloodbank.pojo.VO.MsgVO; import com.czblood.busBloodbank.service.MsgService; @@ -13,6 +14,7 @@ import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.List; +import java.util.Map; @Service public class MsgServiceImpl implements MsgService { @@ -21,10 +23,12 @@ public class MsgServiceImpl implements MsgService { XkMsgMainMapper xkMsgMainMapper; @Resource XkMsgDetailMapper xkMsgDetailMapper; + @Resource + MsgMapper msgMapper; @Override - public List queryMsgList(XkMsgMain xkMsgMain) { - return xkMsgMainMapper.queryList(xkMsgMain); + public List> queryMsgList(XkMsgMain xkMsgMain) { + return msgMapper.queryMapList(xkMsgMain); } @Override diff --git a/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/utils/BloodOutUtil.java b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/utils/BloodOutUtil.java index 41b2ba8..5377364 100644 --- a/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/utils/BloodOutUtil.java +++ b/blood_bus_bloodbank/src/main/java/com/czblood/busBloodbank/utils/BloodOutUtil.java @@ -2,6 +2,7 @@ package com.czblood.busBloodbank.utils; import com.czblood.bus.mapper.*; import com.czblood.bus.pojo.*; +import com.czblood.bus.websocket.SendMessageUtil; import com.czblood.busBloodbank.pojo.VO.BloodOutInfoVO; import org.springframework.stereotype.Component; import org.springframework.transaction.annotation.Transactional; @@ -27,9 +28,7 @@ public class BloodOutUtil { @Resource XkMatchMainMapper xkMatchMainMapper; @Resource - XkMsgMainMapper xkMsgMainMapper; - @Resource - XkMsgDetailMapper xkMsgDetailMapper; + SendMessageUtil sendMessageUtil; @Transactional(rollbackFor = Exception.class) public void saveBloodOutInfo(BloodOutInfoVO bloodOutInfoVO) { @@ -78,11 +77,9 @@ public class BloodOutUtil { } @Transactional(rollbackFor = Exception.class) - public void updateNotifyTime(XkOutMain xkOutMain,XkMsgMain xkMsgMain,XkMsgDetail xkMsgDetail){ + public int updateNotifyTime(XkOutMain xkOutMain,XkMsgMain xkMsgMain,XkMsgDetail xkMsgDetail){ xkOutMainMapper.update(xkOutMain); - xkMsgMainMapper.insert(xkMsgMain); - xkMsgDetail.setMsgid(xkMsgMain.getMsgid()); - xkMsgDetailMapper.insert(xkMsgDetail); + return sendMessageUtil.saveData(xkMsgMain,xkMsgDetail); } } diff --git a/blood_bus_bloodbank/src/main/resources/mapper/BackinMapper.xml b/blood_bus_bloodbank/src/main/resources/mapper/BackinMapper.xml index f19dba2..794096f 100644 --- a/blood_bus_bloodbank/src/main/resources/mapper/BackinMapper.xml +++ b/blood_bus_bloodbank/src/main/resources/mapper/BackinMapper.xml @@ -5,4 +5,32 @@ + + \ No newline at end of file diff --git a/blood_bus_bloodbank/src/main/resources/mapper/MsgMapper.xml b/blood_bus_bloodbank/src/main/resources/mapper/MsgMapper.xml new file mode 100644 index 0000000..df1a930 --- /dev/null +++ b/blood_bus_bloodbank/src/main/resources/mapper/MsgMapper.xml @@ -0,0 +1,19 @@ + + + + + \ No newline at end of file