消息系统,临床发血退血
This commit is contained in:
parent
aab8ed58b0
commit
a16d8342f0
@ -51,5 +51,11 @@
|
|||||||
<groupId>org.apache.pdfbox</groupId>
|
<groupId>org.apache.pdfbox</groupId>
|
||||||
<artifactId>pdfbox</artifactId>
|
<artifactId>pdfbox</artifactId>
|
||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
<!-- websocket -->
|
||||||
|
<dependency>
|
||||||
|
<groupId>org.springframework.boot</groupId>
|
||||||
|
<artifactId>spring-boot-starter-websocket</artifactId>
|
||||||
|
</dependency>
|
||||||
</dependencies>
|
</dependencies>
|
||||||
</project>
|
</project>
|
||||||
|
|||||||
@ -0,0 +1,9 @@
|
|||||||
|
package com.czblood.bus.mapper;
|
||||||
|
|
||||||
|
import com.czblood.bus.pojo.XkBackinDetail;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface XkBackinDetailMapper {
|
||||||
|
List<XkBackinDetail> queryListByBillNo(String billNo);
|
||||||
|
}
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
package com.czblood.bus.mapper;
|
||||||
|
|
||||||
|
import com.czblood.bus.pojo.XkBackinMain;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public interface XkBackinMainMapper {
|
||||||
|
List<XkBackinMain> queryList(XkBackinMain xkBackinMain);
|
||||||
|
XkBackinMain queryOne(String billNo);
|
||||||
|
}
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
package com.czblood.bus.mapper;
|
||||||
|
|
||||||
|
import com.czblood.bus.pojo.XkMsgDetail;
|
||||||
|
|
||||||
|
public interface XkMsgDetailMapper {
|
||||||
|
XkMsgDetail queryOne(int msgId);
|
||||||
|
void insert(XkMsgDetail msgDetail);
|
||||||
|
}
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
package com.czblood.bus.mapper;
|
||||||
|
|
||||||
|
import com.czblood.bus.pojo.XkMsgMain;
|
||||||
|
|
||||||
|
public interface XkMsgMainMapper {
|
||||||
|
XkMsgMain queryOne(int msgId);
|
||||||
|
void insert(XkMsgMain msgMain);
|
||||||
|
}
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
package com.czblood.bus.pojo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@ApiModel("临床退费明细表")
|
||||||
|
public class XkBackinDetail {
|
||||||
|
private String bill_no;
|
||||||
|
private Integer sid;
|
||||||
|
private String blood_no;
|
||||||
|
private BigDecimal price;
|
||||||
|
private String reason;
|
||||||
|
private String product_no;
|
||||||
|
}
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
package com.czblood.bus.pojo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
@ApiModel("临床退血主表")
|
||||||
|
public class XkBackinMain {
|
||||||
|
private String bill_no;
|
||||||
|
@ApiModelProperty("单位类型")
|
||||||
|
private String org_type;
|
||||||
|
@ApiModelProperty("退血单位")
|
||||||
|
private String back_org;
|
||||||
|
@ApiModelProperty("经手人")
|
||||||
|
private String handle_person;
|
||||||
|
@ApiModelProperty("总金额")
|
||||||
|
private BigDecimal total_money;
|
||||||
|
@ApiModelProperty("退血日期")
|
||||||
|
private Date back_date;
|
||||||
|
@ApiModelProperty("录入人")
|
||||||
|
private String input_person;
|
||||||
|
@ApiModelProperty("录入日期")
|
||||||
|
private Date input_date;
|
||||||
|
@ApiModelProperty("审核人")
|
||||||
|
private String audit_person;
|
||||||
|
@ApiModelProperty("审核日期")
|
||||||
|
private Date audit_date;
|
||||||
|
private String remark;
|
||||||
|
}
|
||||||
@ -0,0 +1,21 @@
|
|||||||
|
package com.czblood.bus.pojo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class XkMsgDetail {
|
||||||
|
private Integer sid;
|
||||||
|
@ApiModelProperty("接收科室")
|
||||||
|
private String accept_Dept;
|
||||||
|
@ApiModelProperty("发送科室")
|
||||||
|
private String send_Dept;
|
||||||
|
@ApiModelProperty("消息内容")
|
||||||
|
private String msg_Body;
|
||||||
|
@ApiModelProperty("消息ID")
|
||||||
|
private Integer msgid;
|
||||||
|
}
|
||||||
45
blood_bus/src/main/java/com/czblood/bus/pojo/XkMsgMain.java
Normal file
45
blood_bus/src/main/java/com/czblood/bus/pojo/XkMsgMain.java
Normal file
@ -0,0 +1,45 @@
|
|||||||
|
package com.czblood.bus.pojo;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.NoArgsConstructor;
|
||||||
|
|
||||||
|
import java.util.Date;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
@NoArgsConstructor
|
||||||
|
public class XkMsgMain {
|
||||||
|
private Integer sid;
|
||||||
|
@ApiModelProperty("接收科室")
|
||||||
|
private String accept_Dept;
|
||||||
|
@ApiModelProperty("发送科室")
|
||||||
|
private String send_Dept;
|
||||||
|
@ApiModelProperty("发送人")
|
||||||
|
private String send_Person;
|
||||||
|
@ApiModelProperty("发送时间")
|
||||||
|
private Date send_Date;
|
||||||
|
@ApiModelProperty("接收人")
|
||||||
|
private String accept_Person;
|
||||||
|
@ApiModelProperty("接收时间")
|
||||||
|
private Date accept_Date;
|
||||||
|
@ApiModelProperty("是否已读")
|
||||||
|
private String read_Flag;
|
||||||
|
@ApiModelProperty("是否已发送")
|
||||||
|
private String send_Flag;
|
||||||
|
@ApiModelProperty("是否已接收")
|
||||||
|
private String accept_Flag;
|
||||||
|
@ApiModelProperty("消息类型")
|
||||||
|
private String msg_Type;
|
||||||
|
@ApiModelProperty("消息分类")
|
||||||
|
private String msg_Kind;
|
||||||
|
@ApiModelProperty("消息标题")
|
||||||
|
private String msg_Title;
|
||||||
|
private String exp1;
|
||||||
|
private String exp2;
|
||||||
|
@ApiModelProperty("创建时间")
|
||||||
|
private Date write_Date;
|
||||||
|
@ApiModelProperty("消息ID")
|
||||||
|
private Integer msgid;
|
||||||
|
}
|
||||||
@ -0,0 +1,25 @@
|
|||||||
|
package com.czblood.bus.pojo.websocket;
|
||||||
|
|
||||||
|
import com.czblood.common.core.domain.model.LoginUser;
|
||||||
|
import lombok.AllArgsConstructor;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.websocket.Session;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@AllArgsConstructor
|
||||||
|
public class WebSocketParam {
|
||||||
|
private Set<Session> sessionSet;
|
||||||
|
private final String userId;
|
||||||
|
private LoginUser loginUser;
|
||||||
|
|
||||||
|
// 方便快速构建对象
|
||||||
|
public static WebSocketParam create(String userId, LoginUser loginUser){
|
||||||
|
// ConcurrentHashMap.newKeySet()线程安全set
|
||||||
|
Set<Session> set = ConcurrentHashMap.newKeySet();
|
||||||
|
return new WebSocketParam(set, userId, loginUser);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@ -182,6 +182,10 @@ public class BloodBankUtil {
|
|||||||
return sysUserMapper.selectUserByUserName(userId);
|
return sysUserMapper.selectUserByUserName(userId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<SysUser> queryUserList(SysUser sysUser){
|
||||||
|
return sysUserMapper.queryUserList(sysUser);
|
||||||
|
}
|
||||||
|
|
||||||
public BigDecimal getApplyTransNum(String bloodBreed,BigDecimal applyNum){
|
public BigDecimal getApplyTransNum(String bloodBreed,BigDecimal applyNum){
|
||||||
BigDecimal applyTransNum = bloodBankMapper.getApplyTransNum(bloodBreed);
|
BigDecimal applyTransNum = bloodBankMapper.getApplyTransNum(bloodBreed);
|
||||||
if(applyTransNum == null) return applyNum;
|
if(applyTransNum == null) return applyNum;
|
||||||
|
|||||||
@ -0,0 +1,43 @@
|
|||||||
|
package com.czblood.bus.websocket;
|
||||||
|
|
||||||
|
import lombok.Getter;
|
||||||
|
|
||||||
|
@Getter
|
||||||
|
public enum MsgType {
|
||||||
|
|
||||||
|
//取血通知消息
|
||||||
|
BLOOD_OUT_NOTICE("BLOOD_OUT_NOTICE"),
|
||||||
|
|
||||||
|
//申请单消息
|
||||||
|
APPLY_NOTICE("APPLY_NOTICE"),
|
||||||
|
|
||||||
|
/** 单发消息 */
|
||||||
|
SINGLE("SINGLE"),
|
||||||
|
|
||||||
|
/** 群发消息 */
|
||||||
|
// BROADCAST("BROADCAST"),
|
||||||
|
|
||||||
|
/** 心跳 */
|
||||||
|
HEARTBEAT("HEARTBEAT"),
|
||||||
|
|
||||||
|
/** 系统通知 */
|
||||||
|
NOTICE("NOTICE");
|
||||||
|
|
||||||
|
private final String code;
|
||||||
|
|
||||||
|
MsgType(String code) {
|
||||||
|
this.code = code;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static MsgType fromCode(String code) {
|
||||||
|
if (code == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
for (MsgType t : values()) {
|
||||||
|
if (t.code.equalsIgnoreCase(code)) {
|
||||||
|
return t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,171 @@
|
|||||||
|
package com.czblood.bus.websocket;
|
||||||
|
|
||||||
|
import cn.hutool.json.JSONUtil;
|
||||||
|
import com.czblood.bus.pojo.websocket.WebSocketParam;
|
||||||
|
import com.czblood.common.core.domain.model.LoginUser;
|
||||||
|
import com.czblood.common.utils.SecurityUtils;
|
||||||
|
import lombok.extern.slf4j.Slf4j;
|
||||||
|
import org.springframework.stereotype.Component;
|
||||||
|
|
||||||
|
import javax.websocket.*;
|
||||||
|
import javax.websocket.server.PathParam;
|
||||||
|
import javax.websocket.server.ServerEndpoint;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WebSocket服务
|
||||||
|
* 消息系统核心:根据 JSON 中的 type 字段区分单发/群发
|
||||||
|
*/
|
||||||
|
@ServerEndpoint("/ws/msgserver/{userId}")
|
||||||
|
@Component
|
||||||
|
@Slf4j
|
||||||
|
public class WebSocketServer {
|
||||||
|
|
||||||
|
// 保存在线的用户
|
||||||
|
private static final Map<String, WebSocketParam> onlineUsers = new ConcurrentHashMap<>();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 连接建立成功调用的方法
|
||||||
|
*/
|
||||||
|
@OnOpen
|
||||||
|
public void onOpen(Session session, @PathParam("userId") String userId) {
|
||||||
|
log.info("客户端:{} 建立连接", userId);
|
||||||
|
session.setMaxTextMessageBufferSize(8192000);
|
||||||
|
LoginUser loginUser = SecurityUtils.getLoginUser();
|
||||||
|
WebSocketParam param = onlineUsers.computeIfAbsent(userId, k -> WebSocketParam.create(k, loginUser));
|
||||||
|
boolean addOk = param.getSessionSet().add(session);
|
||||||
|
log.info("客户端:{} 加入sessionSet:{}", userId, addOk);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 收到客户端消息后调用的方法
|
||||||
|
* 根据 JSON 中的 type 字段判断:单发 / 群发 / 心跳 / 通知
|
||||||
|
*/
|
||||||
|
@OnMessage
|
||||||
|
public void onMessage(String message, @PathParam("userId") String userId) {
|
||||||
|
log.info("收到客户端[{}]消息: {}", userId, message);
|
||||||
|
try {
|
||||||
|
// 解析 JSON 为 WsMessage
|
||||||
|
WsMessage msg = JSONUtil.toBean(message, WsMessage.class);
|
||||||
|
if (msg.getType() == null) {
|
||||||
|
log.error("消息缺少 type 字段");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 根据 type 分发
|
||||||
|
switch (msg.getType()) {
|
||||||
|
case SINGLE:
|
||||||
|
// 单发:发给指定用户
|
||||||
|
sendMsg(msg.getTo(), message);
|
||||||
|
break;
|
||||||
|
case BLOOD_OUT_NOTICE:
|
||||||
|
case APPLY_NOTICE:
|
||||||
|
//给指定的一批人发消息
|
||||||
|
//sendToSomeOne(message,userId);
|
||||||
|
break;
|
||||||
|
case NOTICE:
|
||||||
|
// 群发 / 系统通知:发给所有在线用户
|
||||||
|
sendToAll(message);
|
||||||
|
break;
|
||||||
|
case HEARTBEAT:
|
||||||
|
// 心跳:仅记录日志,不转发
|
||||||
|
log.info("心跳 from={}", userId);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
log.info("未知消息类型: {}", msg.getType());
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
log.error("消息处理异常 userId={}", userId, e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 连接关闭调用的方法
|
||||||
|
*/
|
||||||
|
@OnClose
|
||||||
|
public void onClose(Session session, @PathParam("userId") String userId) {
|
||||||
|
WebSocketParam param = onlineUsers.get(userId);
|
||||||
|
if (param == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
param.getSessionSet().remove(session);
|
||||||
|
if (param.getSessionSet().isEmpty()) {
|
||||||
|
onlineUsers.remove(userId);
|
||||||
|
}
|
||||||
|
log.info("用户[{}]ws连接关闭", userId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@OnError
|
||||||
|
public void onError(Session session, @PathParam("userId") String userId, Throwable throwable) {
|
||||||
|
onClose(session, userId);
|
||||||
|
log.error("ws错误 userId={}", userId, throwable);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 群发:给所有在线用户发消息
|
||||||
|
*/
|
||||||
|
public static void sendToAll(String message) {
|
||||||
|
for (WebSocketParam param : onlineUsers.values()) {
|
||||||
|
for (Session session : param.getSessionSet()) {
|
||||||
|
if (session.isOpen()) {
|
||||||
|
try {
|
||||||
|
session.getBasicRemote().sendText(message);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("群发消息失败: {}", e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 单发:向指定 userId 所有在线 ws 会话推送消息
|
||||||
|
*/
|
||||||
|
public static void sendMsg(String userId, String content) {
|
||||||
|
WebSocketParam param = onlineUsers.get(userId);
|
||||||
|
if (param == null || param.getSessionSet().isEmpty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
for (Session wsSession : param.getSessionSet()) {
|
||||||
|
if (wsSession.isOpen()) {
|
||||||
|
try {
|
||||||
|
wsSession.getBasicRemote().sendText(content);
|
||||||
|
log.info("发消息成功 userId={}: {}", userId, content);
|
||||||
|
} catch (Exception e) {
|
||||||
|
log.error("单发消息失败 userId={}: {}", userId, e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// /**
|
||||||
|
// * 给指定的人发消息
|
||||||
|
// * @param msg
|
||||||
|
// */
|
||||||
|
// public static void sendToSomeOne(WsMessage msg){
|
||||||
|
// MsgType type = msg.getType();
|
||||||
|
// String content = msg.getContent();
|
||||||
|
// String userId = msg.getTo();
|
||||||
|
// WebSocketParam param = onlineUsers.get(userId);
|
||||||
|
// if (param == null || param.getSessionSet().isEmpty()) {
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
// for (Session wsSession : param.getSessionSet()) {
|
||||||
|
// if (wsSession.isOpen()) {
|
||||||
|
// try {
|
||||||
|
// wsSession.getBasicRemote().sendText(content);
|
||||||
|
// } catch (Exception e) {
|
||||||
|
// log.error("单发消息失败 userId={}: {}", userId, e.getMessage());
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// switch (type) {
|
||||||
|
// //取血通知,传入的人,是取血人 ,但是我们需要通知这个取血人所对应的整个科室,比较合理
|
||||||
|
// case BLOOD_OUT_NOTICE:
|
||||||
|
//
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
}
|
||||||
@ -0,0 +1,43 @@
|
|||||||
|
package com.czblood.bus.websocket;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.io.Serializable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* WebSocket 统一消息协议。
|
||||||
|
* 所有前端发给后端、后端推给前端的消息都遵循该结构。
|
||||||
|
*
|
||||||
|
* 前端 JSON 示例:
|
||||||
|
* {
|
||||||
|
* "type": "chat", // 必选,消息类型
|
||||||
|
* "from": "1001", // 发送者 userId
|
||||||
|
* "to": "1002", // 接收者 userId;群发时可为 null 或 "ALL"
|
||||||
|
* "title": "你好", // 可选,消息标题
|
||||||
|
* "content": "在吗?", // 业务正文(字符串)
|
||||||
|
* "data": {...}, // 业务扩展字段(对象),不同 type 结构不同
|
||||||
|
* "timestamp": 1729999999999,// 时间戳
|
||||||
|
* "extra": {...} // 预留扩展
|
||||||
|
* }
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class WsMessage implements Serializable {
|
||||||
|
|
||||||
|
|
||||||
|
/** 消息类型:single / broadcast / heartbeat / notice */
|
||||||
|
private MsgType type;
|
||||||
|
|
||||||
|
/** 接收者 userId;群发时为 "ALL" */
|
||||||
|
private String to;
|
||||||
|
|
||||||
|
/** 消息内容 */
|
||||||
|
private String content;
|
||||||
|
|
||||||
|
/** 扩展数据,不同业务传不同结构 */
|
||||||
|
private Object data;
|
||||||
|
|
||||||
|
/** 判断是否群发 */
|
||||||
|
// public boolean isBroadcast() {
|
||||||
|
// return MsgType.BROADCAST == this.type || "ALL".equalsIgnoreCase(this.to);
|
||||||
|
// }
|
||||||
|
}
|
||||||
@ -0,0 +1,9 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||||
|
<mapper namespace="com.czblood.bus.mapper.XkBackinDetailMapper">
|
||||||
|
|
||||||
|
<select id="queryListByBillNo" resultType="com.czblood.bus.pojo.XkBackinDetail">
|
||||||
|
select * from xk_backin_detail where bill_no = #{bill_no}
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
17
blood_bus/src/main/resources/mapper/XkBackinMainMapper.xml
Normal file
17
blood_bus/src/main/resources/mapper/XkBackinMainMapper.xml
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||||
|
<mapper namespace="com.czblood.bus.mapper.XkBackinMainMapper">
|
||||||
|
<select id="queryList" resultType="com.czblood.bus.pojo.XkBackinMain">
|
||||||
|
select * from xk_backin_main
|
||||||
|
<where>
|
||||||
|
<if test="bill_no != null">and bill_no = #{bill_no}</if>
|
||||||
|
<if test="handle_person != null">and handle_person = #{handle_person}</if>
|
||||||
|
<if test="audit_person != null">and audit_person = #{audit_person}</if>
|
||||||
|
<if test="remark != null">and remark = #{remark}</if>
|
||||||
|
</where>
|
||||||
|
</select>
|
||||||
|
<select id="queryOne" resultType="com.czblood.bus.pojo.XkBackinMain">
|
||||||
|
select * from xk_backin_main where bill_no = #{billNo}
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
20
blood_bus/src/main/resources/mapper/XkMsgDetailMapper.xml
Normal file
20
blood_bus/src/main/resources/mapper/XkMsgDetailMapper.xml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||||
|
<mapper namespace="com.czblood.bus.mapper.XkMsgDetailMapper">
|
||||||
|
<insert id="insert">
|
||||||
|
insert into xk_msg_detail (
|
||||||
|
<if test="accept_Dept != null">accept_Dept,</if>
|
||||||
|
<if test="send_Dept != null">send_Dept,</if>
|
||||||
|
msgid,msg_Body
|
||||||
|
)values(
|
||||||
|
<if test="accept_Dept != null">#{accept_Dept},</if>
|
||||||
|
<if test="send_Dept != null">#{send_Dept},</if>
|
||||||
|
#{msgid},#{msg_Body}
|
||||||
|
)
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
<select id="queryOne" resultType="com.czblood.bus.pojo.XkMsgDetail">
|
||||||
|
select * from xk_msg_detail where msgid = #{msgId}
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
35
blood_bus/src/main/resources/mapper/XkMsgMainMapper.xml
Normal file
35
blood_bus/src/main/resources/mapper/XkMsgMainMapper.xml
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8" ?>
|
||||||
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
||||||
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||||
|
<mapper namespace="com.czblood.bus.mapper.XkMsgMainMapper">
|
||||||
|
<insert id="insert" useGeneratedKeys="true" keyProperty="msgid" keyColumn="msgid">
|
||||||
|
insert into xk_msg_main (
|
||||||
|
<if test="accept_Dept != null"> accept_Dept,</if>
|
||||||
|
<if test="send_Dept != null"> send_Dept,</if>
|
||||||
|
<if test="accept_Person != null"> accept_Person,</if>
|
||||||
|
<if test="accept_Date != null"> accept_Date,</if>
|
||||||
|
<if test="read_Flag != null"> read_Flag,</if>
|
||||||
|
<if test="send_Flag != null"> send_Flag,</if>
|
||||||
|
<if test="accept_Flag != null"> accept_Flag,</if>
|
||||||
|
<if test="msg_Type != null"> msg_Type,</if>
|
||||||
|
<if test="msg_Kind != null"> msg_Kind,</if>
|
||||||
|
<if test="msg_Title != null"> msg_Title,</if>
|
||||||
|
write_Date
|
||||||
|
)values (
|
||||||
|
<if test="accept_Dept != null"> #{accept_Dept},</if>
|
||||||
|
<if test="send_Dept != null"> #{send_Dept},</if>
|
||||||
|
<if test="accept_Person != null"> #{accept_Person},</if>
|
||||||
|
<if test="accept_Date != null"> #{accept_Date},</if>
|
||||||
|
<if test="read_Flag != null"> #{read_Flag},</if>
|
||||||
|
<if test="send_Flag != null"> #{send_Flag},</if>
|
||||||
|
<if test="accept_Flag != null"> #{accept_Flag},</if>
|
||||||
|
<if test="msg_Type != null"> #{msg_Type},</if>
|
||||||
|
<if test="msg_Kind != null"> #{msg_Kind},</if>
|
||||||
|
<if test="msg_Title != null"> #{msg_Title},</if>
|
||||||
|
#{write_Date})
|
||||||
|
</insert>
|
||||||
|
|
||||||
|
<select id="queryOne" resultType="com.czblood.bus.pojo.XkMsgMain">
|
||||||
|
select * from xk_msg_main where msgid = #{msgId}
|
||||||
|
</select>
|
||||||
|
</mapper>
|
||||||
@ -0,0 +1,26 @@
|
|||||||
|
package com.czblood.busBloodbank.controller;
|
||||||
|
|
||||||
|
import com.czblood.busBloodbank.service.XkBackinService;
|
||||||
|
import com.czblood.common.core.domain.Result;
|
||||||
|
import io.swagger.annotations.Api;
|
||||||
|
import io.swagger.annotations.ApiOperation;
|
||||||
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
@Api(tags = "临床发血退血")
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/bus/bloodbank/backin")
|
||||||
|
public class XkBackinController {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
private XkBackinService xkBackinService;
|
||||||
|
|
||||||
|
@ApiOperation("获取血液信息")
|
||||||
|
@GetMapping("/queryBloodInfo")
|
||||||
|
public Result queryBloodInfo(String bloodNo,String productNo){
|
||||||
|
return xkBackinService.queryBloodInfo(bloodNo,productNo);
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -0,0 +1,7 @@
|
|||||||
|
package com.czblood.busBloodbank.service;
|
||||||
|
|
||||||
|
import com.czblood.common.core.domain.Result;
|
||||||
|
|
||||||
|
public interface XkBackinService {
|
||||||
|
Result queryBloodInfo(String bloodNo, String productNo);
|
||||||
|
}
|
||||||
@ -9,6 +9,8 @@ import com.czblood.bus.pojo.xtwh.XkBloodBreed;
|
|||||||
import com.czblood.bus.utils.BloodBankUtil;
|
import com.czblood.bus.utils.BloodBankUtil;
|
||||||
import com.czblood.bus.utils.BloodInterfaceUtil;
|
import com.czblood.bus.utils.BloodInterfaceUtil;
|
||||||
import com.czblood.bus.utils.ReportUtil;
|
import com.czblood.bus.utils.ReportUtil;
|
||||||
|
import com.czblood.bus.websocket.MsgType;
|
||||||
|
import com.czblood.bus.websocket.WebSocketServer;
|
||||||
import com.czblood.busBloodbank.mapper.BloodOutMapper;
|
import com.czblood.busBloodbank.mapper.BloodOutMapper;
|
||||||
import com.czblood.busBloodbank.pojo.DTO.BloodOutDTO;
|
import com.czblood.busBloodbank.pojo.DTO.BloodOutDTO;
|
||||||
import com.czblood.busBloodbank.pojo.DTO.BloodOutInfoDTO;
|
import com.czblood.busBloodbank.pojo.DTO.BloodOutInfoDTO;
|
||||||
@ -20,6 +22,7 @@ import com.czblood.busBloodbank.service.BloodOutService;
|
|||||||
import com.czblood.busBloodbank.utils.BloodOutUtil;
|
import com.czblood.busBloodbank.utils.BloodOutUtil;
|
||||||
import com.czblood.busBloodbank.utils.MatchBloodUtil;
|
import com.czblood.busBloodbank.utils.MatchBloodUtil;
|
||||||
import com.czblood.common.core.domain.Result;
|
import com.czblood.common.core.domain.Result;
|
||||||
|
import com.czblood.common.core.domain.entity.SysUser;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
@ -268,9 +271,10 @@ public class BloodOutServiceImpl implements BloodOutService {
|
|||||||
return new Result("0","审核成功");
|
return new Result("0","审核成功");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Result notifyMessage(String billNo) {
|
public Result notifyMessage(String billNo) {
|
||||||
notifyBloodOut(billNo);
|
Result result = notifyBloodOut(billNo);
|
||||||
|
if(!result.getCode().equals("0")) return result;
|
||||||
return new Result("0","通知成功");
|
return new Result("0","通知成功");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -451,12 +455,52 @@ public class BloodOutServiceImpl implements BloodOutService {
|
|||||||
* 通知护士取血
|
* 通知护士取血
|
||||||
* @param billNo
|
* @param billNo
|
||||||
*/
|
*/
|
||||||
public void notifyBloodOut(String billNo){
|
public Result notifyBloodOut(String billNo){
|
||||||
//TODO 这里应该还有通过websocket发消息给护士站的逻辑
|
XkOutMain xkOutMain = xkOutMainMapper.queryOne(billNo);
|
||||||
XkOutMain xkOutMainTemp = new XkOutMain();
|
if(xkOutMain == null) return new Result("-1","该出库单不存在!");
|
||||||
|
String checkSign = BloodBankUtil.isBank(xkOutMain.getCheck_sign());
|
||||||
|
if(!checkSign.equals("Y")) return new Result("-1","该单据没有审核,不能通知护士取血!");
|
||||||
|
|
||||||
|
Date currentTimeDate = bloodBankUtil.getCurrentTimeDate();
|
||||||
|
|
||||||
|
XkOutMain xkOutMainTemp = new XkOutMain();
|
||||||
xkOutMainTemp.setExp2("Y");
|
xkOutMainTemp.setExp2("Y");
|
||||||
xkOutMainTemp.setNotify_time(bloodBankUtil.getCurrentTimeDate());
|
xkOutMainTemp.setNotify_time(currentTimeDate);
|
||||||
xkOutMainTemp.setBill_no(billNo);
|
xkOutMainTemp.setBill_no(billNo);
|
||||||
xkOutMainMapper.update(xkOutMainTemp);
|
//xkOutMainMapper.update(xkOutMainTemp);
|
||||||
|
|
||||||
|
String msgBody = "住院号:" + BloodBankUtil.isBank(xkOutMain.getBeinhos_id()) + ",患者【" + BloodBankUtil.isBank(xkOutMain.getPatient_name()) + "】,申请单号:" + BloodBankUtil.isBank(xkOutMain.getApply_no()) + ",的血液已经准备完毕,可以来输血科取血!";
|
||||||
|
|
||||||
|
//写消息数据主表
|
||||||
|
XkMsgMain xkMsgMainTemp = new XkMsgMain();
|
||||||
|
xkMsgMainTemp.setAccept_Dept(xkOutMain.getDept_id());
|
||||||
|
xkMsgMainTemp.setSend_Dept("输血科");
|
||||||
|
xkMsgMainTemp.setSend_Person(xkOutMain.getCheck_person());
|
||||||
|
xkMsgMainTemp.setSend_Date(xkOutMain.getCheck_date());
|
||||||
|
xkMsgMainTemp.setAccept_Person(xkOutMain.getTake_person()); //接收人
|
||||||
|
xkMsgMainTemp.setAccept_Date(currentTimeDate); //接收时间,先默认一个,后面确认之后在更新
|
||||||
|
xkMsgMainTemp.setRead_Flag("N"); //是否已读
|
||||||
|
xkMsgMainTemp.setSend_Flag("N"); //是否已发送
|
||||||
|
xkMsgMainTemp.setAccept_Flag("N"); //是否已接收
|
||||||
|
xkMsgMainTemp.setMsg_Title("取血通知");
|
||||||
|
xkMsgMainTemp.setMsg_Type(MsgType.BLOOD_OUT_NOTICE.getCode()); //发血消息
|
||||||
|
xkMsgMainTemp.setWrite_Date(currentTimeDate);
|
||||||
|
|
||||||
|
//写消息数据明细表
|
||||||
|
XkMsgDetail xkMsgDetailTemp = new XkMsgDetail();
|
||||||
|
xkMsgDetailTemp.setMsg_Body(msgBody);
|
||||||
|
xkMsgDetailTemp.setAccept_Dept(xkOutMain.getDept_id());
|
||||||
|
xkMsgDetailTemp.setSend_Dept("输血科");
|
||||||
|
bloodOutUtil.updateNotifyTime(xkOutMainTemp,xkMsgMainTemp,xkMsgDetailTemp);
|
||||||
|
//发送消息
|
||||||
|
//取血通知,传入的人,是取血人 ,但是我们需要通知这个取血人所对应的整个科室,比较合理
|
||||||
|
SysUser sysUserQuery = new SysUser();
|
||||||
|
sysUserQuery.setDeptId(Long.parseLong(xkOutMain.getDept_id()));
|
||||||
|
List<SysUser> sysUserList = bloodBankUtil.queryUserList(sysUserQuery);
|
||||||
|
for (SysUser sysUser : sysUserList) {
|
||||||
|
String userName = sysUser.getUserName();
|
||||||
|
WebSocketServer.sendMsg(userName,msgBody);
|
||||||
|
}
|
||||||
|
return new Result("0","操作成功");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,24 @@
|
|||||||
|
package com.czblood.busBloodbank.service.impl;
|
||||||
|
|
||||||
|
import com.czblood.bus.pojo.XkBloodInfo;
|
||||||
|
import com.czblood.bus.utils.BloodBankUtil;
|
||||||
|
import com.czblood.busBloodbank.service.XkBackinService;
|
||||||
|
import com.czblood.common.core.domain.Result;
|
||||||
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
|
import javax.annotation.Resource;
|
||||||
|
|
||||||
|
@Service
|
||||||
|
public class XkBackinServiceImpl implements XkBackinService {
|
||||||
|
|
||||||
|
@Resource
|
||||||
|
BloodBankUtil bloodBankUtil;
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Result queryBloodInfo(String bloodNo, String productNo) {
|
||||||
|
XkBloodInfo xkBloodInfo = bloodBankUtil.queryBloodInfoOne(bloodNo, productNo);
|
||||||
|
if(xkBloodInfo == null) return new Result("-1","血液信息不存在!");
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -26,6 +26,10 @@ public class BloodOutUtil {
|
|||||||
XkBloodInfoMapper xkBloodInfoMapper;
|
XkBloodInfoMapper xkBloodInfoMapper;
|
||||||
@Resource
|
@Resource
|
||||||
XkMatchMainMapper xkMatchMainMapper;
|
XkMatchMainMapper xkMatchMainMapper;
|
||||||
|
@Resource
|
||||||
|
XkMsgMainMapper xkMsgMainMapper;
|
||||||
|
@Resource
|
||||||
|
XkMsgDetailMapper xkMsgDetailMapper;
|
||||||
|
|
||||||
@Transactional(rollbackFor = Exception.class)
|
@Transactional(rollbackFor = Exception.class)
|
||||||
public void saveBloodOutInfo(BloodOutInfoVO bloodOutInfoVO) {
|
public void saveBloodOutInfo(BloodOutInfoVO bloodOutInfoVO) {
|
||||||
@ -73,4 +77,12 @@ public class BloodOutUtil {
|
|||||||
if(xkMatchMain != null) xkMatchMainMapper.update(xkMatchMain);
|
if(xkMatchMain != null) xkMatchMainMapper.update(xkMatchMain);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
public void updateNotifyTime(XkOutMain xkOutMain,XkMsgMain xkMsgMain,XkMsgDetail xkMsgDetail){
|
||||||
|
xkOutMainMapper.update(xkOutMain);
|
||||||
|
xkMsgMainMapper.insert(xkMsgMain);
|
||||||
|
xkMsgDetail.setMsgid(xkMsgMain.getMsgid());
|
||||||
|
xkMsgDetailMapper.insert(xkMsgDetail);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -36,7 +36,10 @@ public class MimeTypeUtils
|
|||||||
// 视频格式
|
// 视频格式
|
||||||
"mp4", "avi", "rmvb",
|
"mp4", "avi", "rmvb",
|
||||||
// pdf
|
// pdf
|
||||||
"pdf" };
|
"pdf" ,
|
||||||
|
//打印模版文件
|
||||||
|
"jrxml"
|
||||||
|
};
|
||||||
|
|
||||||
public static String getExtension(String prefix)
|
public static String getExtension(String prefix)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -32,17 +32,6 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
|
|
||||||
|
|
||||||
<!-- 通用工具-->
|
|
||||||
<!-- <dependency>-->
|
|
||||||
<!-- <groupId>com.czblood</groupId>-->
|
|
||||||
<!-- <artifactId>pf_interfaceCommon</artifactId>-->
|
|
||||||
<!-- </dependency>-->
|
|
||||||
|
|
||||||
<!-- <dependency>-->
|
|
||||||
<!-- <groupId>com.czblood</groupId>-->
|
|
||||||
<!-- <artifactId>pf_transitPF</artifactId>-->
|
|
||||||
<!-- </dependency>-->
|
|
||||||
|
|
||||||
<!--定时任务-->
|
<!--定时任务-->
|
||||||
<!-- <dependency>-->
|
<!-- <dependency>-->
|
||||||
<!-- <groupId>com.czblood</groupId>-->
|
<!-- <groupId>com.czblood</groupId>-->
|
||||||
|
|||||||
@ -127,5 +127,5 @@ public interface SysUserMapper {
|
|||||||
public SysUser checkEmailUnique(String email);
|
public SysUser checkEmailUnique(String email);
|
||||||
|
|
||||||
|
|
||||||
public SysUser queryUserList(SysUser sysUser);
|
public List<SysUser> queryUserList(SysUser sysUser);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -208,5 +208,5 @@ public interface ISysUserService {
|
|||||||
|
|
||||||
Result syncUser(String loginYLJG);
|
Result syncUser(String loginYLJG);
|
||||||
|
|
||||||
public SysUser queryUserList(SysUser sysUser);
|
public List<SysUser> queryUserList(SysUser sysUser);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -546,7 +546,7 @@ public class SysUserServiceImpl implements ISysUserService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public SysUser queryUserList(SysUser sysUser) {
|
public List<SysUser> queryUserList(SysUser sysUser) {
|
||||||
return userMapper.queryUserList(sysUser);
|
return userMapper.queryUserList(sysUser);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -19,6 +19,9 @@ import org.springframework.web.multipart.MultipartFile;
|
|||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.nio.file.Path;
|
||||||
|
import java.nio.file.Paths;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@ -51,6 +54,12 @@ public class CommonController {
|
|||||||
}
|
}
|
||||||
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
|
String realFileName = System.currentTimeMillis() + fileName.substring(fileName.indexOf("_") + 1);
|
||||||
String filePath = RuoYiConfig.getDownloadPath() + fileName;
|
String filePath = RuoYiConfig.getDownloadPath() + fileName;
|
||||||
|
//下载模版
|
||||||
|
Path path = Paths.get(filePath);
|
||||||
|
if(!Files.exists(path)){
|
||||||
|
//原来的文件夹找不到,就在下载模版的位子找
|
||||||
|
filePath = RuoYiConfig.getProfile() + "/templates/" + fileName;
|
||||||
|
}
|
||||||
|
|
||||||
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
|
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
|
||||||
FileUtils.setAttachmentResponseHeader(response, realFileName);
|
FileUtils.setAttachmentResponseHeader(response, realFileName);
|
||||||
|
|||||||
@ -232,13 +232,13 @@ public class SysLoginService {
|
|||||||
SysUser sysUser1 = new SysUser();
|
SysUser sysUser1 = new SysUser();
|
||||||
sysUser1.setUserName(username);
|
sysUser1.setUserName(username);
|
||||||
sysUser1.setHos_id(loginParam.getLoginYLJG());
|
sysUser1.setHos_id(loginParam.getLoginYLJG());
|
||||||
SysUser sysUser = userService.queryUserList(sysUser1);
|
List<SysUser> sysUserList = userService.queryUserList(sysUser1);
|
||||||
|
|
||||||
//管理员不判断
|
//管理员不判断
|
||||||
// if (!username.equals("admin")){
|
// if (!username.equals("admin")){
|
||||||
// if (sysUser == null) throw new GlobalException("医疗机构:"+loginParam.getLoginYLJGName()+"不存在该用户!"+username);
|
// if (sysUser == null) throw new GlobalException("医疗机构:"+loginParam.getLoginYLJGName()+"不存在该用户!"+username);
|
||||||
// }
|
// }
|
||||||
if (sysUser == null) throw new GlobalException("医疗机构:"+loginParam.getLoginYLJGName()+"不存在该用户!"+username);
|
if (sysUserList.isEmpty()) throw new GlobalException("医疗机构:"+loginParam.getLoginYLJGName()+"不存在该用户!"+username);
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -146,6 +146,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|||||||
select * from sys_user where del_flag = '0'
|
select * from sys_user where del_flag = '0'
|
||||||
<if test="userName != null and userName != ''">and user_name = #{userName}</if>
|
<if test="userName != null and userName != ''">and user_name = #{userName}</if>
|
||||||
<if test="hos_id != null and hos_id != ''">and hos_id = #{hos_id}</if>
|
<if test="hos_id != null and hos_id != ''">and hos_id = #{hos_id}</if>
|
||||||
|
<if test="deptId != null and deptId != ''">and dept_id = #{deptId}</if>
|
||||||
</select>
|
</select>
|
||||||
|
|
||||||
<select id="checkUserNameUnique" parameterType="String" resultMap="SysUserResult">
|
<select id="checkUserNameUnique" parameterType="String" resultMap="SysUserResult">
|
||||||
|
|||||||
@ -493,3 +493,13 @@ if not exists(SELECT 1 FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'xk_r
|
|||||||
)
|
)
|
||||||
ALTER TABLE xk_report_template ADD CONSTRAINT UQ_xk_report_template_reportNo UNIQUE(report_no);
|
ALTER TABLE xk_report_template ADD CONSTRAINT UQ_xk_report_template_reportNo UNIQUE(report_no);
|
||||||
end
|
end
|
||||||
|
|
||||||
|
ALTER TABLE xk_msg_main ADD msgid bigint primary key IDENTITY(1,1);
|
||||||
|
go
|
||||||
|
ALTER TABLE xk_msg_main ALTER COLUMN sid int null ;
|
||||||
|
go
|
||||||
|
|
||||||
|
ALTER TABLE xk_msg_detail ADD msgid bigint primary key;
|
||||||
|
go
|
||||||
|
ALTER TABLE xk_msg_detail ALTER COLUMN sid int null ;
|
||||||
|
go
|
||||||
@ -91,6 +91,7 @@ IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_blood_info'
|
|||||||
GO
|
GO
|
||||||
|
|
||||||
ALTER TABLE xk_match_detail ALTER COLUMN product_no VARCHAR(18) NOT NULL;
|
ALTER TABLE xk_match_detail ALTER COLUMN product_no VARCHAR(18) NOT NULL;
|
||||||
|
go
|
||||||
IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_match_detail' AND type = 'PK' )
|
IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_match_detail' AND type = 'PK' )
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
||||||
@ -124,6 +125,7 @@ IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_instorage_m
|
|||||||
GO
|
GO
|
||||||
|
|
||||||
ALTER TABLE xk_instorage_detail ALTER COLUMN product_no VARCHAR(18) NOT NULL;
|
ALTER TABLE xk_instorage_detail ALTER COLUMN product_no VARCHAR(18) NOT NULL;
|
||||||
|
go
|
||||||
IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_instorage_detail' AND type = 'PK' )
|
IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_instorage_detail' AND type = 'PK' )
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
||||||
@ -132,6 +134,7 @@ IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_instorage_d
|
|||||||
GO
|
GO
|
||||||
|
|
||||||
ALTER TABLE xk_backout_detail ALTER COLUMN product_no VARCHAR(18) NOT NULL;
|
ALTER TABLE xk_backout_detail ALTER COLUMN product_no VARCHAR(18) NOT NULL;
|
||||||
|
go
|
||||||
IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_backout_detail' AND type = 'PK' )
|
IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_backout_detail' AND type = 'PK' )
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
||||||
@ -149,6 +152,7 @@ GO
|
|||||||
|
|
||||||
|
|
||||||
ALTER TABLE xk_discard_detail ALTER COLUMN product_no VARCHAR(18) NOT NULL;
|
ALTER TABLE xk_discard_detail ALTER COLUMN product_no VARCHAR(18) NOT NULL;
|
||||||
|
go
|
||||||
IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_discard_main' AND type = 'PK' )
|
IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_discard_main' AND type = 'PK' )
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
||||||
@ -164,7 +168,9 @@ IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_discard_det
|
|||||||
GO
|
GO
|
||||||
|
|
||||||
ALTER TABLE xk_out_detail ALTER COLUMN blood_no VARCHAR(32) NOT NULL;
|
ALTER TABLE xk_out_detail ALTER COLUMN blood_no VARCHAR(32) NOT NULL;
|
||||||
|
go
|
||||||
ALTER TABLE xk_out_detail ALTER COLUMN product_no VARCHAR(18) NOT NULL;
|
ALTER TABLE xk_out_detail ALTER COLUMN product_no VARCHAR(18) NOT NULL;
|
||||||
|
go
|
||||||
IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_out_detail' AND type = 'PK' )
|
IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_out_detail' AND type = 'PK' )
|
||||||
BEGIN
|
BEGIN
|
||||||
|
|
||||||
@ -180,3 +186,18 @@ IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_out_main' A
|
|||||||
END
|
END
|
||||||
GO
|
GO
|
||||||
|
|
||||||
|
IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_backin_main' AND type = 'PK' )
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
ALTER TABLE xk_backin_main ADD CONSTRAINT PK_xk_backin_main PRIMARY KEY CLUSTERED (bill_no);
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|
||||||
|
ALTER TABLE xk_backin_detail ALTER COLUMN product_no VARCHAR(18) NOT NULL;
|
||||||
|
go
|
||||||
|
IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_backin_detail' AND type = 'PK' )
|
||||||
|
BEGIN
|
||||||
|
|
||||||
|
ALTER TABLE xk_backin_detail ADD CONSTRAINT PK_xk_backin_detail PRIMARY KEY CLUSTERED (bill_no,blood_no,product_no);
|
||||||
|
END
|
||||||
|
GO
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user