Compare commits

..

19 Commits

Author SHA1 Message Date
jiangs
5fb1e91dc8 临床发血退血 2026-09-07 16:30:11 +08:00
jiangs
a0aca66d29 临床退血打印 2026-09-04 17:26:58 +08:00
jiangs
7f96cb848b 消息系统,临床发血退血 2026-09-04 14:46:18 +08:00
jiangs
27ce2482e6 消息系统,临床发血退血 2026-09-01 17:37:41 +08:00
jiangs
2e77bcb10c 消息系统 2026-09-01 14:31:36 +08:00
jiangs
e3c6eae37e 消息系统,输血申请消息,发血消息 2026-08-31 17:09:54 +08:00
jiangs
afe13d5bc3 消息系统,临床发血退血 2026-08-31 09:16:47 +08:00
jiangs
a16d8342f0 消息系统,临床发血退血 2026-08-28 16:37:01 +08:00
jiangs
aab8ed58b0 临床发血,打印模版界面 2026-08-25 17:34:52 +08:00
jiangs
71abe9d30d 临床发血,打印模版界面 2026-08-24 09:20:47 +08:00
jiangs
9d6c723c7b 临床发血,打印,多次发血 2026-08-18 18:01:34 +08:00
jiangs
06478b0bad 临床发血,审核逻辑,打印 2026-08-17 18:00:40 +08:00
jiangs
20aca19131 临床发血,保存数据,审核逻辑 2026-08-14 17:47:02 +08:00
jiangs
19ed34db34 交叉配血功能,临床发血功能开发 2026-08-14 10:14:35 +08:00
jiangs
ebfc24a73c 交叉配血功能,临床发血功能开发 2026-08-12 09:13:39 +08:00
jiangs
dd0aaf74f1 交叉配血功能 2026-08-07 18:02:34 +08:00
jiangs
88d214bc24 交叉配血,血型复核修改 2026-08-06 18:01:57 +08:00
jiangs
ebb6676687 修改标本接收,标本送出 2026-08-05 18:03:42 +08:00
jiangs
15ac15e1b9 修改标本接收,标本送出 2026-08-05 18:03:16 +08:00
165 changed files with 5572 additions and 87 deletions

39
.idea/misc.xml generated
View File

@ -13,6 +13,45 @@
</set>
</option>
</component>
<component name="NullableNotNullManager">
<option name="myDefaultNullable" value="org.jetbrains.annotations.Nullable" />
<option name="myDefaultNotNull" value="org.jetbrains.annotations.NotNull" />
<option name="myOrdered" value="false" />
<option name="myNullables">
<value>
<list size="11">
<item index="0" class="java.lang.String" itemvalue="org.jspecify.annotations.Nullable" />
<item index="1" class="java.lang.String" itemvalue="org.jetbrains.annotations.Nullable" />
<item index="2" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.qual.Nullable" />
<item index="3" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NullableDecl" />
<item index="4" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NullableType" />
<item index="5" class="java.lang.String" itemvalue="org.eclipse.jdt.annotation.Nullable" />
<item index="6" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.Nullable" />
<item index="7" class="java.lang.String" itemvalue="jakarta.annotation.Nullable" />
<item index="8" class="java.lang.String" itemvalue="javax.annotation.Nullable" />
<item index="9" class="java.lang.String" itemvalue="javax.annotation.CheckForNull" />
<item index="10" class="java.lang.String" itemvalue="org.springframework.lang.Nullable" />
</list>
</value>
</option>
<option name="myNotNulls">
<value>
<list size="11">
<item index="0" class="java.lang.String" itemvalue="org.jspecify.annotations.NonNull" />
<item index="1" class="java.lang.String" itemvalue="org.jetbrains.annotations.NotNull" />
<item index="2" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.qual.NonNull" />
<item index="3" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NonNullDecl" />
<item index="4" class="java.lang.String" itemvalue="org.checkerframework.checker.nullness.compatqual.NonNullType" />
<item index="5" class="java.lang.String" itemvalue="org.eclipse.jdt.annotation.NonNull" />
<item index="6" class="java.lang.String" itemvalue="edu.umd.cs.findbugs.annotations.NonNull" />
<item index="7" class="java.lang.String" itemvalue="jakarta.annotation.Nonnull" />
<item index="8" class="java.lang.String" itemvalue="javax.annotation.Nonnull" />
<item index="9" class="java.lang.String" itemvalue="lombok.NonNull" />
<item index="10" class="java.lang.String" itemvalue="org.springframework.lang.NonNull" />
</list>
</value>
</option>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_8" default="true" project-jdk-name="1.8" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>

View File

@ -51,5 +51,11 @@
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
</dependency>
<!-- websocket -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
</dependencies>
</project>

View File

@ -53,4 +53,22 @@ public class BloodInterfaceTypeConstants {
* 取消血型复核
*/
public static final String CANCEL_CHECK_BLOOD_TYPE = "CANCEL_CHECK_BLOOD_TYPE";
/**
* 交叉配血
*/
public static final String MATCH_BLOOD_TYPE = "MATCH_BLOOD_TYPE";
/**
* 作废配血单
*/
public static final String CANCEL_MATCH_BLOOD_TYPE = "CANCEL_MATCH_BLOOD_TYPE";
/**
* 临床发血审核
*/
public static final String BLOOD_OUT_AUDIT = "BLOOD_OUT_AUDIT";
/**
* 临床发血退血审核
*/
public static final String BLOOD_BACK_AUDIT = "BLOOD_BACK_AUDIT";
}

View File

@ -24,4 +24,12 @@ public class BloodPrintTypeConstants {
* 输血申请单
*/
public static final String BLOOD_APPLY = "BLOOD_APPLY";
/**
* 临床发血单
*/
public static final String BLOOD_OUT = "BLOOD_OUT";
/**
* 临床退血单
*/
public static final String BLOOD_OUT_BACK = "BLOOD_OUT_BACK";
}

View File

@ -14,4 +14,7 @@ public class BloodSysLogConstants {
public static final String LOG_TYPE_ACCEPT_SAMPLE_INFO = "标本接收";
public static final String LOG_TYPE_SEND_SAMPLE_INFO = "标本送检";
public static final String LOG_TYPE_CHECK_BLOOD_TYPE = "血型复核";
public static final String LOG_TYPE_MATCH_BLOOD = "交叉配血";
public static final String LOG_TYPE_BLOOD_OUT = "临床发血";
public static final String LOG_TYPE_BLOOD_BACK = "临床发血退血";
}

View File

@ -1,5 +1,6 @@
package com.czblood.bus.controller;
import com.czblood.bus.mapper.XkBloodInfoMapper;
import com.czblood.bus.mapper.XkProTransfuseProjectMapper;
import com.czblood.bus.mapper.XkXtwhIllDiagnoseMapper;
import com.czblood.bus.mapper.xtwh.XkXtwhOperationMapper;
@ -42,6 +43,9 @@ public class BloodCommonController extends BaseController {
XkXtwhOperationMapper xkXtwhOperationMapper;
@Resource
SysUserMapper sysUserMapper;
@Resource
XkBloodInfoMapper xkBloodInfoMapper;
@ApiOperation("获取输血前检验项目")
@PostMapping("/queryLisProject")
@ -140,6 +144,13 @@ public class BloodCommonController extends BaseController {
return new Result("0","获取数据成功!",BloodBankUtil.isBank(deptType));
}
@ApiOperation("根据血液流水号获取血液信息")
@GetMapping("/queryBloodInfoByBloodNo")
public Result queryBloodInfoByBloodNo(String bloodNo){
List<XkBloodInfo> xkBloodInfoList = xkBloodInfoMapper.queryListByBloodNo(bloodNo);
return new Result("0","获取数据成功!",xkBloodInfoList);
}
// @ApiOperation("测试接口")
// @GetMapping("/test01")
// public Result test01(String billNo){

View File

@ -0,0 +1,13 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkBackinDetail;
import io.lettuce.core.dynamic.annotation.Param;
import java.util.List;
public interface XkBackinDetailMapper {
List<XkBackinDetail> queryListByBillNo(String billNo);
void insert(XkBackinDetail xkBackinDetail);
void deleteByBillNo(String billNo);
void deleteOne(@Param("billNo") String billNo,@Param("bloodNo") String bloodNo,@Param("productNo") String productNo);
}

View File

@ -0,0 +1,13 @@
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);
void insert(XkBackinMain xkBackinMain);
void update(XkBackinMain xkBackinMain);
void deleteByBillNo(String billNo);
}

View File

@ -0,0 +1,4 @@
package com.czblood.bus.mapper;
public interface XkBackoutDetailMapper {
}

View File

@ -0,0 +1,4 @@
package com.czblood.bus.mapper;
public interface XkBackoutMainMapper {
}

View File

@ -0,0 +1,12 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkBloodInfo;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface XkBloodInfoMapper {
XkBloodInfo queryOne(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
List<XkBloodInfo> queryListByBloodNo(String bloodNo);
void update(XkBloodInfo xkBloodInfo);
}

View File

@ -1,5 +1,8 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkChargeDetail;
public interface XkChargeDetailMapper {
void deleteByBillNo(String bill_no);
void insert(XkChargeDetail xkChargeDetail);
}

View File

@ -0,0 +1,10 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkChargeItem;
import java.util.List;
public interface XkChargeItemMapper {
List<XkChargeItem> queryList(XkChargeItem xkChargeItem);
XkChargeItem queryOne(String item_id);
}

View File

@ -8,4 +8,5 @@ import java.util.List;
public interface XkChargeMainMapper {
void deleteByBillNo(String bill_no);
List<XkChargeMain> queryList(XkChargeMain xkChargeMain);
void insert(XkChargeMain xkChargeMain);
}

View File

@ -9,5 +9,6 @@ public interface XkCheckBloodtypeMapper {
void insert(XkCheckBloodtype xkCheckBloodtype);
XkCheckBloodtype queryOne(String billNo);
void delete(String billNo);
void update(XkCheckBloodtype xkCheckBloodtype);
}

View File

@ -0,0 +1,4 @@
package com.czblood.bus.mapper;
public interface XkDiscardDetailMapper {
}

View File

@ -0,0 +1,4 @@
package com.czblood.bus.mapper;
public interface XkDiscardMainMapper {
}

View File

@ -0,0 +1,11 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkInstorageDetail;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface XkInstorageDetailMapper {
List<XkInstorageDetail> queryByBillNo(String bill_no);
List<XkInstorageDetail> queryByBloodNo(@Param("blood_no") String blood_no, @Param("product_no") String product_no);
}

View File

@ -0,0 +1,7 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkInstorageMain;
public interface XkInstorageMainMapper {
XkInstorageMain queryOneByBillNo(String bill_no);
}

View File

@ -0,0 +1,14 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkMatchDetail;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface XkMatchDetailMapper {
void insert(XkMatchDetail xkMatchDetail);
List<XkMatchDetail> queryListByBillNo(String bill_no);
void update(XkMatchDetail xkMatchDetail);
void deleteByBillNo(String bill_no);
List<XkMatchDetail> queryListByBloodNo(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
}

View File

@ -0,0 +1,12 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkMatchMain;
import java.util.List;
public interface XkMatchMainMapper {
void insertMatch(XkMatchMain xkMatchMain);
XkMatchMain queryOne(String bill_no);
void update(XkMatchMain xkMatchMain);
List<XkMatchMain> queryList(XkMatchMain xkMatchMain);
}

View File

@ -0,0 +1,10 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkMsgDetail;
import java.util.List;
public interface XkMsgDetailMapper {
List<XkMsgDetail> queryOne(int msgId);
void insert(XkMsgDetail msgDetail);
}

View File

@ -0,0 +1,16 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkMsgMain;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
public interface XkMsgMainMapper {
XkMsgMain queryOne(int msgId);
void insert(XkMsgMain msgMain);
List<XkMsgMain> queryList(XkMsgMain msgMain);
void update(XkMsgMain msgMain);
int queryNoReadCount();
void batchUpdateFlag(@Param("msgVOList") List<Integer> msgVOList,@Param("accept_Person") String accept_Person,@Param("accept_Date") Date accept_Date);
}

View File

@ -0,0 +1,13 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkOutDetail;
import java.util.List;
public interface XkOutDetailMapper {
List<XkOutDetail> queryListByBillNo(String billNo);
void insert(XkOutDetail xkOutDetail);
void deleteByBillNo(String billNo);
List<XkOutDetail> queryList(XkOutDetail xkOutDetail);
void update(XkOutDetail xkOutDetail);
}

View File

@ -3,6 +3,12 @@ package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkOutMain;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface XkOutMainMapper {
XkOutMain queryOne(@Param("billNo") String billNo);
void insert(XkOutMain xkOutMain);
void update(XkOutMain xkOutMain);
List<XkOutMain> queryList(XkOutMain xkOutMain);
}

View File

@ -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);
}

View File

@ -9,4 +9,5 @@ public interface XkTransfuseApplyBloodbreedMapper {
List<XkTransfuseApplyBloodbreed> queryOne(String bill_no);
void insert(XkTransfuseApplyBloodbreed xkTransfuseApplyBloodbreed);
void update(XkTransfuseApplyBloodbreed xkTransfuseApplyBloodbreed);
void deleteByBillNo(String bill_no);
}

View File

@ -0,0 +1,13 @@
package com.czblood.bus.mapper.xtwh;
import com.czblood.bus.pojo.xtwh.XkReportTemplate;
import java.util.List;
public interface XkReportTemplateMapper {
void insert(XkReportTemplate xkReportTemplate);
void update(XkReportTemplate xkReportTemplate);
XkReportTemplate queryOne(String reportNo);
void deleteByReportNo(String reportNo);
List<XkReportTemplate> queryList(XkReportTemplate xkReportTemplate);
}

View File

@ -15,4 +15,5 @@ public class ReportParam {
private String billNo;
private String beinhosId;
private String bloodSum;
private String userName;
}

View File

@ -0,0 +1,24 @@
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;
@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;
@ApiModelProperty("收费退血单号")
private String charge_billno;
}

View File

@ -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;
}

View File

@ -0,0 +1,23 @@
package com.czblood.bus.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class XkBackoutDetail {
private String bill_no;
private Integer sid;
private String blood_no;
private BigDecimal price;
private String Reason_Type;
private String reason;
private BigDecimal Temperature;
private String Pack_Full;
private String cancle_flag;
private String product_no;
}

View File

@ -0,0 +1,36 @@
package com.czblood.bus.pojo;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("血液退库主表")
public class XkBackoutMain {
private String billNo;
private String org_type;
private String hos_id;
private String back_org;
private String handle_person;
private BigDecimal total_money;
private Date back_date;
private String send_flag;
private String check_flag;
private String out_flag;
private String input_person;
private Date input_date;
private String audit_person;
private Date audit_date;
private String bill_cancle_flag;
private String check_person;
private Date check_date;
private String check_result;
private String return_remark;
private String remark;
}

View File

@ -49,7 +49,7 @@ public class XkBloodInfo {
private String blood_bag_no;
@ApiModelProperty("血袋生成批号")
private String blood_bag_batch;
@ApiModelProperty("血液状态")
@ApiModelProperty("血液状态,1.在库,4.出库,2报废")
private String blood_status;
@ApiModelProperty("特殊处理")
private String special_deal;

View File

@ -0,0 +1,49 @@
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;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("收费项目")
public class XkChargeItem {
@ApiModelProperty("收费项目编号")
private String item_id;
@ApiModelProperty("收费项目名称")
private String item_name;
@ApiModelProperty("收费金额")
private BigDecimal money;
@ApiModelProperty("收费规格")
private BigDecimal spec;
@ApiModelProperty("收费单位")
private String Unit;
@ApiModelProperty("模块编号")
private String module_code;
@ApiModelProperty("对应his项目编号")
private String his_code;
@ApiModelProperty("对应血液品种")
private String blood_breed;
@ApiModelProperty("对应RH血型")
private String rh_blood_type;
@ApiModelProperty("对应项目")
private String cure_item;
@ApiModelProperty("收费类型")
private String charge_type;
@ApiModelProperty("使用标志")
private String use_sign;
@ApiModelProperty("对应his项目名称")
private String his_item_name;
@ApiModelProperty("对应his项目规格")
private String his_spec;
private String py;
@ApiModelProperty("对应his项目收费类型")
private String his_charge_type;
@ApiModelProperty("模块类型")
private String module_type;
}

View File

@ -58,11 +58,14 @@ public class XkCheckBloodtype {
private String need_match;
@ApiModelProperty("单据类别")
private String bill_sort;
@ApiModelProperty("单据状态")
@ApiModelProperty("单据状态 A初登,B已配血,C已发血")
private String bill_status;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("亚型")
private String Sub_Blood;
private String bz1;
private String hos_id;
@ApiModelProperty("血小板抗体检测")
private String plt_test;
}

View File

@ -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 XkDiscardDetail {
private String bill_no;
private Integer sid;
private String blood_no;
private BigDecimal price;
private String reason;
private String product_no;
}

View File

@ -0,0 +1,29 @@
package com.czblood.bus.pojo;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("报废血液主表")
public class XkDiscardMain {
private String bill_no;
private String handle_person;
private BigDecimal total_money;
private Date discard_date;
private String input_person;
private Date input_date;
private String audit_person;
private Date audit_date;
private String remark;
private String ratify_person;
private String ratify_attitude;
private String discard_approach;
private String discard_method;
}

View File

@ -0,0 +1,26 @@
package com.czblood.bus.pojo;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("血液入库明细")
public class XkInstorageDetail {
private String bill_no;
private Integer sid;
private String blood_no;
private BigDecimal price;
private String remark;
private String check_abo;
private String check_rh;
private String check_person;
private Date check_date;
private String product_no;
}

View File

@ -0,0 +1,29 @@
package com.czblood.bus.pojo;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.math.BigDecimal;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("血液入库主表")
public class XkInstorageMain {
private String bill_no;
private String org;
private String out_no;
private Date out_date;
private Date occur_date;
private String handle_person;
private String stor_mode;
private BigDecimal total_money;
private String remark;
private String input_person;
private Date input_date;
private String book_no;
private String check_sign;
}

View File

@ -48,6 +48,8 @@ public class XkMatchDetail {
@ApiModelProperty("延迟标志")
private Integer delay_sign;
private String product_no;
@ApiModelProperty("血液存放位子")
private String position_blood;
@ApiModelProperty("标本存放位子")
private String position_barcode;
}

View File

@ -26,7 +26,7 @@ public class XkMatchMain {
private String sample_id;
@ApiModelProperty("检验日期")
private Date test_date;
@ApiModelProperty("单据状态")
@ApiModelProperty("单据状态,A未发血,B已发血,ZF已作废")
private String bill_status;
@ApiModelProperty("是否配型")
private String match_sign;

View File

@ -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;
}

View File

@ -0,0 +1,48 @@
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;
private Date sWriteDate;
private Date eWriteDate;
}

View File

@ -0,0 +1,35 @@
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;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("血液出库明细表")
public class XkOutDetail {
private String bill_no;
private Integer sid;
private String blood_no;
@ApiModelProperty("单价")
private BigDecimal price;
@ApiModelProperty("特殊处理")
private String special_deal;
@ApiModelProperty("是否有反应")
private String have_reaction;
@ApiModelProperty("完成标志")
private String finish_sign;
@ApiModelProperty("血液是否已接收")
private String accept_flag;
private String exp1;
private String exp2;
private String exp3;
private String remark;
private String accept_dept;
private String product_no;
}

View File

@ -1,6 +1,7 @@
package com.czblood.bus.pojo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@ -15,30 +16,54 @@ import java.util.Date;
public class XkOutMain {
private String bill_no;
private String hos_id;
@ApiModelProperty("出库日期")
private Date occur_date;
@ApiModelProperty("总金额")
private BigDecimal total_money;
@ApiModelProperty("取血人")
private String take_person;
@ApiModelProperty("发血经手人")
private String handle_person;
@ApiModelProperty("申请单号")
private String apply_no;
@ApiModelProperty("配血单号")
private String match_no;
@ApiModelProperty("患者姓名")
private String patient_name;
@ApiModelProperty("住院号")
private String beinhos_id;
@ApiModelProperty("科室ID")
private String dept_id;
@ApiModelProperty("血型复核单号")
private String check_no;
@ApiModelProperty("单据类别,程序默认C")
private String bill_sort;
@ApiModelProperty("通知取血时间")
private Date notify_time;
@ApiModelProperty("是否已经无偿报销")
private String is_free_account;
@ApiModelProperty("录入人")
private String input_person;
@ApiModelProperty("录入时间")
private Date input_date;
@ApiModelProperty("审核标志")
private String check_sign;
@ApiModelProperty("审核人")
private String check_person;
@ApiModelProperty("审核时间")
private Date check_date;
@ApiModelProperty("审批人")
private String audit_person;
@ApiModelProperty("备注")
private String remark;
private String exp1;
@ApiModelProperty("是否通知取血")
private String exp2;
@ApiModelProperty("最后修改时间")
private Date last_modified;
private String all_recycle_sign;
private String receive_person;
private String receive_id;
@ApiModelProperty("多次发血标志")
private String more_sign;
}

View File

@ -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;
}

View File

@ -91,7 +91,7 @@ public class XkTransfuseApply {
private String remark;
@ApiModelProperty("预约入库标志(N=否、Y=是)")
private String is_plan;
@ApiModelProperty("单据类别(A,B,C,D,J)")
@ApiModelProperty("单据类别(A不需要配血,B,C,D,J)")
private String bill_sort;
@ApiModelProperty("是否有标本申请")
private String sample_sign;

View File

@ -30,6 +30,7 @@ public class XkTransfuseApplyBloodbreed {
private String replace_bloodbreed;
private String apply_bloodtype;
private BigDecimal ops_bleeding;
@ApiModelProperty("实际用血量")
private BigDecimal ops_fact_use;
@ApiModelProperty("输血目的")
private String intent;

View File

@ -0,0 +1,23 @@
package com.czblood.bus.pojo.inter;
import cn.hutool.json.JSONUtil;
import com.czblood.bus.constants.BloodInterfaceTypeConstants;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BloodBackAuditRequest implements BloodInterfaceType {
private final String method = BloodInterfaceTypeConstants.BLOOD_BACK_AUDIT;
/**
* 单据编号
*/
private String billNo;
@Override
public String serializationJson() {
return JSONUtil.toJsonStr(this);
}
}

View File

@ -0,0 +1,20 @@
package com.czblood.bus.pojo.inter;
import cn.hutool.json.JSONUtil;
import com.czblood.bus.constants.BloodInterfaceTypeConstants;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BloodOutAuditRequest implements BloodInterfaceType {
private final String method = BloodInterfaceTypeConstants.BLOOD_OUT_AUDIT;
private String billNo;
@Override
public String serializationJson() {
return JSONUtil.toJsonStr(this);
}
}

View File

@ -0,0 +1,20 @@
package com.czblood.bus.pojo.inter;
import cn.hutool.json.JSONUtil;
import com.czblood.bus.constants.BloodInterfaceTypeConstants;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CancelMatchBloodTypeRequest implements BloodInterfaceType {
private final String method = BloodInterfaceTypeConstants.CANCEL_MATCH_BLOOD_TYPE;
private String billNo;
@Override
public String serializationJson() {
return JSONUtil.toJsonStr(this);
}
}

View File

@ -10,7 +10,6 @@ import lombok.NoArgsConstructor;
@NoArgsConstructor
@Data
public class CheckBloodTypeRequest implements BloodInterfaceType {
private final String method = BloodInterfaceTypeConstants.CHECK_BLOOD_TYPE;
private String billNo;

View File

@ -0,0 +1,21 @@
package com.czblood.bus.pojo.inter;
import cn.hutool.json.JSONUtil;
import com.czblood.bus.constants.BloodInterfaceTypeConstants;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MatchBloodTypeRequest implements BloodInterfaceType{
private final String method = BloodInterfaceTypeConstants.MATCH_BLOOD_TYPE;
private String billNo;
@Override
public String serializationJson() {
return JSONUtil.toJsonStr(this);
}
}

View File

@ -0,0 +1,26 @@
package com.czblood.bus.pojo.websocket;
import com.czblood.common.core.domain.entity.SysUser;
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 SysUser loginUser;
// 方便快速构建对象
public static WebSocketParam create(String userId, SysUser loginUser){
// ConcurrentHashMap.newKeySet()线程安全set
Set<Session> set = ConcurrentHashMap.newKeySet();
return new WebSocketParam(set, userId, loginUser);
}
}

View File

@ -0,0 +1,32 @@
package com.czblood.bus.pojo.xtwh;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("打印模版表")
public class XkReportTemplate {
private String report_id;
@ApiModelProperty("打印模版编号")
private String report_no;
@ApiModelProperty("打印模版名称")
private String report_name;
@ApiModelProperty("打印模版大小")
private String report_size;
@ApiModelProperty("创建时间")
private Date create_time;
@ApiModelProperty("更新时间")
private Date update_time;
private Date create_time_s;
private Date create_time_e;
private Date update_time_s;
private Date update_time_e;
}

View File

@ -24,7 +24,7 @@ import java.util.List;
import java.util.stream.Collectors;
/**
* 登录接口
* 外部共用接口
*/
@Component
public class BloodExtInterfaceService implements ExtSystemInterface {

View File

@ -5,9 +5,14 @@ import cn.hutool.core.date.DateUtil;
import com.czblood.bus.cache.DmzdCache;
import com.czblood.bus.cache.OptionCache;
import com.czblood.bus.mapper.*;
import com.czblood.bus.pojo.XkBloodInfo;
import com.czblood.bus.pojo.XkCheckBloodtype;
import com.czblood.bus.pojo.XkMatchDetail;
import com.czblood.bus.pojo.XkOutMain;
import com.czblood.bus.pojo.xtwh.XkBloodBreed;
import com.czblood.bus.pojo.xtwh.XkDmzd;
import com.czblood.bus.pojo.xtwh.XkParameter;
import com.czblood.common.core.domain.Result;
import com.czblood.common.core.domain.entity.SysUser;
import com.czblood.system.mapper.SysUserMapper;
import com.czblood.system.util.CommonUtil;
@ -38,7 +43,13 @@ public class BloodBankUtil {
@Resource
SysUserMapper sysUserMapper;
@Resource
XkBloodApplyTransMapper xkBloodApplyTransMapper;
XkBloodInfoMapper xkBloodInfoMapper;
@Resource
XkCheckBloodtypeMapper xkCheckBloodtypeMapper;
@Resource
XkMatchDetailMapper xkMatchDetailMapper;
@Resource
XkOutMainMapper xkOutMainMapper;
/**
@ -171,6 +182,10 @@ public class BloodBankUtil {
return sysUserMapper.selectUserByUserName(userId);
}
public List<SysUser> queryUserList(SysUser sysUser){
return sysUserMapper.queryUserList(sysUser);
}
public BigDecimal getApplyTransNum(String bloodBreed,BigDecimal applyNum){
BigDecimal applyTransNum = bloodBankMapper.getApplyTransNum(bloodBreed);
if(applyTransNum == null) return applyNum;
@ -178,4 +193,51 @@ public class BloodBankUtil {
return applyNum.divide(applyTransNum,2, RoundingMode.HALF_UP);
}
public XkBloodInfo queryBloodInfoOne(String bloodNo,String productNo){
return xkBloodInfoMapper.queryOne(bloodNo, productNo);
}
/**
* 校验操作权限
* @param flag
* @param billNo
* @param billModify
* @param userId
* @return
*/
public Result checkOperatorModify(String flag,String billNo,boolean billModify,String userId){
//操作人是否只能修改自己操作的单据?(血型复核、交叉配血、临床发血等)Y是,N否
String usermodifyset = getParameterValue("USERMODIFYSET");
if(!usermodifyset.equals("Y")) return new Result("0","参数未开启,校验通过!");
if(!billModify) return new Result("0","校验通过!");
switch (flag){
case "XXFH": //血型复核
XkCheckBloodtype xkCheckBloodtype = xkCheckBloodtypeMapper.queryOne(billNo);
if(xkCheckBloodtype == null) return new Result("0","校验通过");
if(!xkCheckBloodtype.getTest_person().equals(userId)){
return new Result("-1","当前血型复核单[" + billNo + "]是由【" +
getUserInfo(userId).getNickName() + "】登记,您没有权限操作!");
}
break;
case "JCPX": //交叉配血
List<XkMatchDetail> xkMatchDetailList = xkMatchDetailMapper.queryListByBillNo(billNo);
if(xkMatchDetailList.isEmpty()) return new Result("0","校验通过");
List<XkMatchDetail> collect = xkMatchDetailList.stream().filter(xkMatchDetail -> xkMatchDetail.getMatch_medic().equals(userId)).collect(Collectors.toList());
if(collect.isEmpty()){
return new Result("-1","当前交叉配血单[" + billNo + "]是由【" +
getUserInfo(userId).getNickName() + "】登记,您没有权限操作!");
}
break;
case "LCFX": //临床发血
XkOutMain xkOutMain = xkOutMainMapper.queryOne(billNo);
if(xkOutMain == null) return new Result("0","校验通过");
if(!xkOutMain.getHandle_person().equals(userId) || !xkOutMain.getInput_person().equals(userId)){
return new Result("-1","当前临床发血单[" + billNo + "]是由【" +
getUserInfo(userId).getNickName() + "】登记,您没有权限操作!");
}
break;
}
return new Result("0","校验通过");
}
}

View File

@ -0,0 +1,45 @@
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;
private final String desc;
MsgType(String code,String desc) {
this.code = code;
this.desc = desc;
}
public static MsgType fromCode(String code) {
if (code == null) {
return null;
}
for (MsgType t : values()) {
if (t.code.equalsIgnoreCase(code)) {
return t;
}
}
return null;
}
}

View File

@ -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;
}

View File

@ -0,0 +1,71 @@
package com.czblood.bus.websocket;
import com.czblood.bus.mapper.XkMsgDetailMapper;
import com.czblood.bus.mapper.XkMsgMainMapper;
import com.czblood.bus.mapper.XkTransfuseApplyMapper;
import com.czblood.bus.pojo.XkMsgDetail;
import com.czblood.bus.pojo.XkMsgMain;
import com.czblood.bus.pojo.XkTransfuseApply;
import com.czblood.bus.utils.BloodBankUtil;
import com.czblood.common.utils.spring.SpringUtils;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.Date;
@Component
public class SendMessageUtil {
@Resource
XkTransfuseApplyMapper xkTransfuseApplyMapper;
@Resource
BloodBankUtil bloodBankUtil;
@Resource
XkMsgMainMapper xkMsgMainMapper;
@Resource
XkMsgDetailMapper xkMsgDetailMapper;
public int saveMessage(String billNo,String content) {
XkTransfuseApply xkTransfuseApply = xkTransfuseApplyMapper.queryOne(billNo);
if (xkTransfuseApply == null) return -1;
Date currentTimeDate = bloodBankUtil.getCurrentTimeDate();
//保存消息数据,写一条消息记录
//写消息数据主表
XkMsgMain xkMsgMainTemp = new XkMsgMain();
xkMsgMainTemp.setAccept_Dept("输血科");
xkMsgMainTemp.setSend_Dept(xkTransfuseApply.getDept_id());
xkMsgMainTemp.setSend_Person(xkTransfuseApply.getApply_medic());
xkMsgMainTemp.setSend_Date(xkTransfuseApply.getApply_date());
xkMsgMainTemp.setAccept_Person(""); //接收人
//xkMsgMainTemp.setAccept_Date(currentTimeDate); //接收时间,先默认一个,后面确认之后在更新
xkMsgMainTemp.setRead_Flag("N"); //是否已读
xkMsgMainTemp.setSend_Flag("Y"); //是否已发送
xkMsgMainTemp.setAccept_Flag("N"); //是否已接收
xkMsgMainTemp.setMsg_Title(MsgType.APPLY_NOTICE.getDesc()); //申请单消息
xkMsgMainTemp.setMsg_Type(MsgType.APPLY_NOTICE.getCode());
xkMsgMainTemp.setWrite_Date(currentTimeDate);
//写消息数据明细表
XkMsgDetail xkMsgDetailTemp = new XkMsgDetail();
xkMsgDetailTemp.setMsg_Body(content);
xkMsgDetailTemp.setAccept_Dept("输血科");
xkMsgDetailTemp.setSend_Dept(xkTransfuseApply.getDept_id());
//返回消息ID给前端
return SpringUtils.getBean(SendMessageUtil.class).saveData(xkMsgMainTemp,xkMsgDetailTemp);
}
@Transactional(rollbackFor = Exception.class)
public int saveData(XkMsgMain xkMsgMain, XkMsgDetail xkMsgDetail) {
xkMsgMainMapper.insert(xkMsgMain);
xkMsgDetail.setMsgid(xkMsgMain.getMsgid());
xkMsgDetailMapper.insert(xkMsgDetail);
return xkMsgMain.getMsgid();
}
}

View File

@ -0,0 +1,40 @@
package com.czblood.bus.websocket;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
/**
* WebSocket配置类(Spring Boot 原生方式)
*/
@Configuration
@Slf4j
public class WebSocketConfig {
@Bean
public ServerEndpointExporter serverEndpointExporter() {
return new ServerEndpointExporter() {
@Override
public void afterPropertiesSet() {
try {
super.afterPropertiesSet();
} catch (IllegalStateException e) {
// 测试环境或无WebSocket容器时ServerContainer不可用,跳过注册
log.error("WebSocket ServerContainer不可用,跳过端点注册(测试环境可忽略此警告)");
}
}
@Override
public void afterSingletonsInstantiated() {
try {
super.afterSingletonsInstantiated();
} catch (IllegalStateException e) {
// 测试环境或无WebSocket容器时ServerContainer不可用,跳过注册
log.warn("WebSocket ServerContainer不可用,跳过端点注册(测试环境可忽略)");
} catch (Exception e) {
log.warn("WebSocket afterSingletonsInstantiated 跳过(测试环境可忽略): {}", e.getMessage());
}
}
};
}
}

View File

@ -0,0 +1,227 @@
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;
import com.czblood.common.core.domain.entity.SysUser;
import com.czblood.common.utils.HosIdHolder;
import com.czblood.common.utils.spring.SpringUtils;
import com.czblood.system.mapper.SysDeptMapper;
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.List;
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);
SysUser loginUser = null;
try{
loginUser = SpringUtils.getBean(BloodBankUtil.class).getUserInfo(userId);
}catch (Exception e){
log.error("获取登录用户信息失败 userId={}", userId, e);
}finally {
if(loginUser != null){
SysUser finalLoginUser = loginUser;
WebSocketParam param = onlineUsers.computeIfAbsent(userId, k -> WebSocketParam.create(k, finalLoginUser));
boolean addOk = param.getSessionSet().add(session);
log.info("客户端:{} 加入sessionSet:{}", userId, addOk);
}
}
}
/**
* 收到客户端消息后调用的方法
* // ★ 手动设置 hos_id 到 ThreadLocal
* // WebSocket 线程没有 HTTP 请求上下文和 SecurityContext,HosIdHolder 无法自动获取 hos_id
* // 因此从 onOpen 时缓存的 WebSocketParam.loginUser 中取出 hos_id 手动注入
*/
@OnMessage
public void onMessage(String message, @PathParam("userId") String userId) {
log.info("收到客户端[{}]消息: {}", userId, message);
String hosId = null;
WebSocketParam senderParam = onlineUsers.get(userId);
if (senderParam != null && senderParam.getLoginUser() != null) {
hosId = senderParam.getLoginUser().getHos_id();
}
if (hosId != null && !hosId.isEmpty()) {
HosIdHolder.setHosId(hosId);
log.info("WebSocket 手动注入 hos_id={}, userId={}", hosId, userId);
} else {
log.warn("WebSocket 未能获取到发送者的 hos_id, userId={}", userId);
}
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(), msg);
break;
case BLOOD_OUT_NOTICE:
case APPLY_NOTICE:
//给指定的一批人发消息
sendToSomeOne(msg);
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);
} finally {
// ★ 清理 ThreadLocal,防止 Tomcat 线程池复用导致脏数据残留
HosIdHolder.clear();
}
}
/**
* 连接关闭调用的方法
*/
@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, WsMessage msg) {
WebSocketParam param = onlineUsers.get(userId);
if (param == null || param.getSessionSet().isEmpty()) {
log.info("没有用户在线,无法发送消息。。。。userId={}",userId);
return;
}
String jsonStr = JSONUtil.toJsonStr(msg);
for (Session wsSession : param.getSessionSet()) {
if (wsSession.isOpen()) {
try {
wsSession.getBasicRemote().sendText(jsonStr);
log.info("发消息成功 userId={}: {}", userId, jsonStr);
} 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 billNo = "";
try{
JSONObject data = (JSONObject)msg.getData();
billNo = data.getStr("billNo");
}catch (Exception e){
log.error("消息数据解析异常:", e);
return;
}
//保存消息数据,写一条消息记录
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<SysDept> sysDeptList = SpringUtils.getBean(SysDeptMapper.class).selectDeptList(sysDept);
for (SysDept dept : sysDeptList) {
Long deptId = dept.getDeptId();
SysUser sysUserQuery = new SysUser();
sysUserQuery.setDeptId(deptId);
List<SysUser> sysUserList = SpringUtils.getBean(BloodBankUtil.class).queryUserList(sysUserQuery);
for (SysUser sysUser : sysUserList) {
sendMsg(sysUser.getUserName(), msg);
}
}
break;
}
}
}

View File

@ -0,0 +1,52 @@
package com.czblood.bus.websocket;
import lombok.Data;
import java.io.Serializable;
import java.util.Date;
/**
* WebSocket 统一消息协议。
* 所有前端发给后端、后端推给前端的消息都遵循该结构。
*
* 前端 JSON 示例:
* {
* "type": "chat", // 必选,消息类型
* "from": "1001", // 发送者 userId
* "to": "1002", // 接收者 userId;群发时可为 null 或 "ALL"
* "title": "你好", // 可选,消息标题
* "content": "在吗?", // 业务正文(字符串)
* "data": {
* "billNo": ""
* }, // 业务扩展字段(对象),不同 type 结构不同
* "timestamp": "2023-04-01 13:59:59",// 时间格式:yyyy-MM-dd HH:mm:ss,例如:2023-04-01 13:59:59
* "extra": {} // 预留扩展
* }
*/
@Data
public class WsMessage implements Serializable {
/** 消息类型:single / broadcast / heartbeat / notice */
private MsgType type;
/** 接收者 userId;群发时为 "ALL" */
private String to;
/** 消息内容 */
private String content;
/** 消息标题 */
private String title;
/** 扩展数据,不同业务传不同结构 */
private Object data;
/** 返回数据 */
private ParamExtra extra;
/** 消息发送时间 */
private Date timestamp;
/** 判断是否群发 */
// public boolean isBroadcast() {
// return MsgType.BROADCAST == this.type || "ALL".equalsIgnoreCase(this.to);
// }
}

View File

@ -0,0 +1,21 @@
<?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">
<insert id="insert">
insert into xk_backin_detail (
bill_no,sid,blood_no,price,reason,product_no,charge_billno
)values(
#{bill_no},#{sid},#{blood_no},#{price},#{reason},#{product_no},#{charge_billno})
</insert>
<delete id="deleteByBillNo">
delete from xk_backin_detail where bill_no = #{billNo}
</delete>
<delete id="deleteOne">
delete from xk_backin_detail where bill_no = #{billNo} and blood_no = #{bloodNo} and product_no = #{productNo}
</delete>
<select id="queryListByBillNo" resultType="com.czblood.bus.pojo.XkBackinDetail">
select * from xk_backin_detail where bill_no = #{billNo}
</select>
</mapper>

View File

@ -0,0 +1,61 @@
<?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">
<insert id="insert">
insert into xk_backin_main (
<if test="org_type != null">org_type,</if>
<if test="back_org != null">back_org,</if>
<if test="handle_person != null">handle_person,</if>
<if test="total_money != null">total_money,</if>
<if test="back_date != null">back_date,</if>
<if test="input_person != null">input_person,</if>
<if test="input_date != null">input_date,</if>
<if test="audit_person != null">audit_person,</if>
<if test="audit_date != null">audit_date,</if>
<if test="remark != null">remark,</if>
bill_no
)values(
<if test="org_type != null">#{org_type},</if>
<if test="back_org != null">#{back_org},</if>
<if test="handle_person != null">#{handle_person},</if>
<if test="total_money != null">#{total_money},</if>
<if test="back_date != null">#{back_date},</if>
<if test="input_person != null">#{input_person},</if>
<if test="input_date != null">#{input_date},</if>
<if test="audit_person != null">#{audit_person},</if>
<if test="audit_date != null">#{audit_date},</if>
<if test="remark != null">#{remark},</if>
#{bill_no})
</insert>
<update id="update">
update xk_backin_main set
<if test="org_type != null">org_type = #{org_type},</if>
<if test="back_org != null">back_org = #{back_org},</if>
<if test="handle_person != null">handle_person = #{handle_person},</if>
<if test="total_money != null">total_money = #{total_money},</if>
<if test="back_date != null">back_date = #{back_date},</if>
<if test="input_person != null">input_person = #{input_person},</if>
<if test="input_date != null">input_date = #{input_date},</if>
<if test="audit_person != null">audit_person = #{audit_person},</if>
<if test="audit_date != null">audit_date = #{audit_date},</if>
<if test="remark != null">remark = #{remark},</if>
bill_no = #{bill_no}
where bill_no = #{bill_no}
</update>
<delete id="deleteByBillNo">
delete from xk_backin_main where bill_no = #{billNo}
</delete>
<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>

View File

@ -0,0 +1,5 @@
<?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.XkBackoutDetailMapper">
</mapper>

View File

@ -0,0 +1,5 @@
<?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.XkBackoutMainMapper">
</mapper>

View File

@ -0,0 +1,41 @@
<?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.XkBloodInfoMapper">
<update id="update">
update xk_blood_info set
<if test="blood_batch != null">blood_batch = #{blood_batch},</if>
<if test="donor_no != null">donor_no = #{donor_no},</if>
<if test="donblood_no != null">donblood_no = #{donblood_no},</if>
<if test="blood_breed != null">blood_breed = #{blood_breed},</if>
<if test="blood_type != null">blood_type = #{blood_type},</if>
<if test="rh_blood_type != null">rh_blood_type = #{rh_blood_type},</if>
<if test="capacity != null">capacity = #{capacity},</if>
<if test="unit != null">unit = #{unit},</if>
<if test="pick_date != null">pick_date = #{pick_date},</if>
<if test="produce_date != null">produce_date = #{produce_date},</if>
<if test="valid_date != null">valid_date = #{valid_date},</if>
<if test="blood_bag_kind != null">blood_bag_kind = #{blood_bag_kind},</if>
<if test="blood_bag_spec != null">blood_bag_spec = #{blood_bag_spec},</if>
<if test="blood_bag_no != null">blood_bag_no = #{blood_bag_no},</if>
<if test="blood_bag_batch != null">blood_bag_batch = #{blood_bag_batch},</if>
<if test="blood_status != null">blood_status = #{blood_status},</if>
<if test="special_deal != null">special_deal = #{special_deal},</if>
<if test="blood_source != null">blood_source = #{blood_source},</if>
<if test="auto_no != null">auto_no = #{auto_no},</if>
<if test="blood_sort != null">blood_sort = #{blood_sort},</if>
<if test="last_modified != null">last_modified = #{last_modified},</if>
<if test="abnor_sign != null">abnor_sign = #{abnor_sign},</if>
<if test="recycle_sign != null">recycle_sign = #{recycle_sign},</if>
<if test="Remark != null">Remark = #{Remark},</if>
hos_id = #{hos_id}
where blood_no = #{blood_no} and product_no = #{product_no}
</update>
<select id="queryOne" resultType="com.czblood.bus.pojo.XkBloodInfo">
select * from xk_blood_info where blood_no = #{bloodNo} and product_no = #{productNo}
</select>
<select id="queryListByBloodNo" resultType="com.czblood.bus.pojo.XkBloodInfo">
select * from xk_blood_info where blood_no = #{bloodNo}
</select>
</mapper>

View File

@ -2,6 +2,12 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.czblood.bus.mapper.XkChargeDetailMapper">
<insert id="insert">
insert into xk_charge_detail(
bill_no,sid,serial_number,price,number,sum,remark,item_name,spec,charge_type,unit,charge_flag,blood_no,product_no
)values(
#{bill_no},#{sid},#{serial_number},#{price},#{number},#{sum},#{remark},#{item_name},#{spec},#{charge_type},#{unit},#{charge_flag},#{blood_no},#{product_no})
</insert>
<delete id="deleteByBillNo">
delete from xk_charge_detail where bill_no = #{bill_no}

View File

@ -0,0 +1,24 @@
<?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.XkChargeItemMapper">
<select id="queryList" resultType="com.czblood.bus.pojo.XkChargeItem">
select * from xk_charge_item
<where>
<if test="item_id != null">and item_id = #{item_id}</if>
<if test="item_name != null">and item_name like '%'+#{item_name}+'%'</if>
<if test="module_code != null">and module_code = #{module_code}</if>
<if test="his_code != null">and his_code = #{his_code}</if>
<if test="blood_breed != null">and blood_breed = #{blood_breed}</if>
<if test="rh_blood_type != null">and rh_blood_type = #{rh_blood_type}</if>
<if test="cure_item != null">and cure_item = #{cure_item}</if>
<if test="charge_type != null">and charge_type = #{charge_type}</if>
<if test="use_sign != null">and use_sign = #{use_sign}</if>
<if test="his_item_name != null">and his_item_name like '%'+#{his_item_name}+'%'</if>
</where>
</select>
<select id="queryOne" resultType="com.czblood.bus.pojo.XkChargeItem">
select * from xk_charge_item where item_id = #{item_id}
</select>
</mapper>

View File

@ -2,6 +2,29 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.czblood.bus.mapper.XkChargeMainMapper">
<insert id="insert">
insert into xk_charge_main (
<if test="relative_billno != null">relative_billno,</if>
<if test="remark != null">remark,</if>
<if test="send_flag != null">send_flag,</if>
<if test="check_sign != null">check_sign,</if>
<if test="last_modified != null">last_modified,</if>
<if test="send_time != null">send_time,</if>
<if test="read_time != null">read_time,</if>
<if test="read_flag != null">read_flag,</if>
bill_no,beinhos_id,occur_date,handle_person
)values(
<if test="relative_billno != null">#{relative_billno},</if>
<if test="remark != null">#{remark},</if>
<if test="send_flag != null">#{send_flag},</if>
<if test="check_sign != null">#{check_sign},</if>
<if test="last_modified != null">#{last_modified},</if>
<if test="send_time != null">#{send_time},</if>
<if test="read_time != null">#{read_time},</if>
<if test="read_flag != null">#{read_flag},</if>
#{bill_no},#{beinhos_id},#{occur_date},#{handle_person}
)
</insert>
<delete id="deleteByBillNo">
delete from xk_charge_main where bill_no = #{bill_no}

View File

@ -22,6 +22,7 @@
<if test="remark != null">remark,</if>
<if test="Sub_Blood != null">Sub_Blood,</if>
<if test="bz1 != null">bz1,</if>
<if test="plt_test != null">plt_test,</if>
hos_id,bill_no,apply_no,beinhos_id,patient_name,dept_id,check_abo,check_fabo,affirm_abo
)values (
<if test="check_rh != null">#{check_rh},</if>
@ -42,8 +43,40 @@
<if test="remark != null">#{remark},</if>
<if test="Sub_Blood != null">#{Sub_Blood},</if>
<if test="bz1 != null">#{bz1},</if>
<if test="plt_test != null">#{plt_test},</if>
#{hos_id},#{bill_no},#{apply_no},#{beinhos_id},#{patient_name},#{dept_id},#{check_abo},#{check_fabo},#{affirm_abo})
</insert>
<update id="update">
update xk_check_bloodtype set
<if test="apply_no != null">apply_no = #{apply_no},</if>
<if test="beinhos_id != null">beinhos_id = #{beinhos_id},</if>
<if test="patient_name != null">patient_name = #{patient_name},</if>
<if test="dept_id != null">dept_id = #{dept_id},</if>
<if test="check_abo != null">check_abo = #{check_abo},</if>
<if test="check_fabo != null">check_fabo = #{check_fabo},</if>
<if test="affirm_abo != null">affirm_abo = #{affirm_abo},</if>
<if test="check_rh != null">check_rh = #{check_rh},</if>
<if test="antibody1 != null">antibody1 = #{antibody1},</if>
<if test="antibody2 != null">antibody2 = #{antibody2},</if>
<if test="antibody3 != null">antibody3 = #{antibody3},</if>
<if test="affirm_antibody != null">affirm_antibody = #{affirm_antibody},</if>
<if test="proteid_test != null">proteid_test = #{proteid_test},</if>
<if test="test_person != null">test_person = #{test_person},</if>
<if test="test_date != null">test_date = #{test_date},</if>
<if test="check_person != null">check_person = #{check_person},</if>
<if test="input_person != null">input_person = #{input_person},</if>
<if test="input_date != null">input_date = #{input_date},</if>
<if test="sample_id != null">sample_id = #{sample_id},</if>
<if test="need_match != null">need_match = #{need_match},</if>
<if test="bill_sort != null">bill_sort = #{bill_sort},</if>
<if test="bill_status != null">bill_status = #{bill_status},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="Sub_Blood != null">Sub_Blood = #{Sub_Blood},</if>
<if test="bz1 != null">bz1 = #{bz1},</if>
<if test="plt_test != null">plt_test = #{plt_test},</if>
bill_no = #{bill_no}
where bill_no = #{bill_no}
</update>
<delete id="delete">
delete from xk_check_bloodtype where bill_no = #{billNo}
</delete>
@ -53,6 +86,7 @@
<if test="bill_no != null and bill_no != ''">and bill_no = #{bill_no}</if>
<if test="apply_no != null and apply_no != ''">and apply_no = #{apply_no}</if>
<if test="beinhos_id != null and beinhos_id != ''">and beinhos_id = #{beinhos_id}</if>
<if test="bill_status != null and bill_status != ''">and bill_status = #{bill_status}</if>
</select>
<select id="queryOne" resultType="com.czblood.bus.pojo.XkCheckBloodtype">
select * from xk_check_bloodtype where bill_no = #{billNo}

View File

@ -0,0 +1,6 @@
<?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.XkDiscardDetailMapper">
</mapper>

View File

@ -0,0 +1,6 @@
<?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.XkDiscardMainMapper">
</mapper>

View File

@ -0,0 +1,12 @@
<?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.XkInstorageDetailMapper">
<select id="queryByBillNo" resultType="com.czblood.bus.pojo.XkInstorageDetail">
SELECT * FROM xk_instorage_detail WHERE bill_no = #{bill_no}
</select>
<select id="queryByBloodNo" resultType="com.czblood.bus.pojo.XkInstorageDetail">
select * from xk_instorage_detail where blood_no = #{blood_no} and product_no = #{product_no}
</select>
</mapper>

View File

@ -0,0 +1,8 @@
<?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.XkInstorageMainMapper">
<select id="queryOneByBillNo" resultType="com.czblood.bus.pojo.XkInstorageMain">
SELECT * FROM xk_instorage_main WHERE bill_no = #{bill_no}
</select>
</mapper>

View File

@ -0,0 +1,78 @@
<?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.XkMatchDetailMapper">
<insert id="insert">
insert into xk_match_detail (
<if test="check_offer_abo != null">check_offer_abo,</if>
<if test="check_offer_fabo != null">check_offer_fabo,</if>
<if test="offer_affirm_abo != null">offer_affirm_abo,</if>
<if test="check_offer_rh != null">check_offer_rh,</if>
<if test="match_medic != null">match_medic,</if>
<if test="second_match_medic != null">second_match_medic,</if>
<if test="match_date != null">match_date,</if>
<if test="match_method != null">match_method,</if>
<if test="check_method != null">check_method,</if>
<if test="first_side != null">first_side,</if>
<if test="second_side != null">second_side,</if>
<if test="result != null">result,</if>
<if test="add_sign != null">add_sign,</if>
<if test="delay_day != null">delay_day,</if>
<if test="delay_sign != null">delay_sign,</if>
<if test="position_blood != null">position_blood,</if>
<if test="position_barcode != null">position_barcode,</if>
bill_no,sid,hos_id,blood_no,product_no
)values (
<if test="check_offer_abo != null">#{check_offer_abo},</if>
<if test="check_offer_fabo != null">#{check_offer_fabo},</if>
<if test="offer_affirm_abo != null">#{offer_affirm_abo},</if>
<if test="check_offer_rh != null">#{check_offer_rh},</if>
<if test="match_medic != null">#{match_medic},</if>
<if test="second_match_medic != null">#{second_match_medic},</if>
<if test="match_date != null">#{match_date},</if>
<if test="match_method != null">#{match_method},</if>
<if test="check_method != null">#{check_method},</if>
<if test="first_side != null">#{first_side},</if>
<if test="second_side != null">#{second_side},</if>
<if test="result != null">#{result},</if>
<if test="add_sign != null">#{add_sign},</if>
<if test="delay_day != null">#{delay_day},</if>
<if test="delay_sign != null">#{delay_sign},</if>
<if test="position_blood != null">#{position_blood},</if>
<if test="position_barcode != null">#{position_barcode},</if>
#{bill_no},#{sid},#{hos_id},#{blood_no},#{product_no}
)
</insert>
<update id="update">
update xk_match_detail set
<if test="check_offer_abo != null">check_offer_abo = #{check_offer_abo},</if>
<if test="check_offer_fabo != null">check_offer_fabo = #{check_offer_fabo},</if>
<if test="offer_affirm_abo != null">offer_affirm_abo = #{offer_affirm_abo},</if>
<if test="check_offer_rh != null">check_offer_rh = #{check_offer_rh},</if>
<if test="match_medic != null">match_medic = #{match_medic},</if>
<if test="second_match_medic != null">second_match_medic = #{second_match_medic},</if>
<if test="match_date != null">match_date = #{match_date},</if>
<if test="match_method != null">match_method = #{match_method},</if>
<if test="check_method != null">check_method = #{check_method},</if>
<if test="first_side != null">first_side = #{first_side},</if>
<if test="second_side != null">second_side = #{second_side},</if>
<if test="result != null">result = #{result},</if>
<if test="add_sign != null">add_sign = #{add_sign},</if>
<if test="delay_day != null">delay_day = #{delay_day},</if>
<if test="delay_sign != null">delay_sign = #{delay_sign},</if>
<if test="position_blood != null">position_blood = #{position_blood},</if>
<if test="position_barcode != null">position_barcode = #{position_barcode},</if>
bill_no = #{bill_no}
where bill_no = #{bill_no}
</update>
<delete id="deleteByBillNo">
delete from xk_match_detail where bill_no = #{bill_no}
</delete>
<select id="queryListByBillNo" resultType="com.czblood.bus.pojo.XkMatchDetail">
select * from xk_match_detail where bill_no = #{bill_no}
</select>
<select id="queryListByBloodNo" resultType="com.czblood.bus.pojo.XkMatchDetail">
select * from xk_match_detail where blood_no = #{bloodNo} and product_no = #{productNo}
</select>
</mapper>

View File

@ -0,0 +1,67 @@
<?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.XkMatchMainMapper">
<insert id="insertMatch">
insert into xk_match_main (
<if test="dept_id != null">dept_id,</if>
<if test="apply_no != null">apply_no,</if>
<if test="check_no != null">check_no,</if>
<if test="sample_id != null">sample_id,</if>
<if test="test_date != null">test_date,</if>
<if test="bill_status != null">bill_status,</if>
<if test="match_sign != null">match_sign,</if>
<if test="remark != null">remark,</if>
<if test="input_person != null">input_person,</if>
<if test="input_date != null">input_date,</if>
<if test="last_modified != null">last_modified,</if>
bill_no,hos_id,beinhos_id,patient_name
)values (
<if test="dept_id != null">#{dept_id},</if>
<if test="apply_no != null">#{apply_no},</if>
<if test="check_no != null">#{check_no},</if>
<if test="sample_id != null">#{sample_id},</if>
<if test="test_date != null">#{test_date},</if>
<if test="bill_status != null">#{bill_status},</if>
<if test="match_sign != null">#{match_sign},</if>
<if test="remark != null">#{remark},</if>
<if test="input_person != null">#{input_person},</if>
<if test="input_date != null">#{input_date},</if>
<if test="last_modified != null">#{last_modified},</if>
#{bill_no},#{hos_id},#{beinhos_id},#{patient_name})
</insert>
<update id="update">
update xk_match_main set
<if test="beinhos_id != null">beinhos_id = #{beinhos_id},</if>
<if test="patient_name != null">patient_name = #{patient_name},</if>
<if test="dept_id != null">dept_id = #{dept_id},</if>
<if test="apply_no != null">apply_no = #{apply_no},</if>
<if test="check_no != null">check_no = #{check_no},</if>
<if test="sample_id != null">sample_id = #{sample_id},</if>
<if test="test_date != null">test_date = #{test_date},</if>
<if test="bill_status != null">bill_status = #{bill_status},</if>
<if test="match_sign != null">match_sign = #{match_sign},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="input_person != null">input_person = #{input_person},</if>
<if test="input_date != null">input_date = #{input_date},</if>
<if test="last_modified != null">last_modified = #{last_modified},</if>
bill_no = #{bill_no}
where bill_no = #{bill_no}
</update>
<select id="queryOne" resultType="com.czblood.bus.pojo.XkMatchMain">
select * from xk_match_main where bill_no = #{bill_no}
</select>
<select id="queryList" resultType="com.czblood.bus.pojo.XkMatchMain">
select * from xk_match_main
<where>
<if test="apply_no != null">and apply_no = #{apply_no}</if>
<if test="beinhos_id != null">and beinhos_id = #{beinhos_id}</if>
<if test="patient_name != null">and patient_name = #{patient_name}</if>
<if test="check_no != null">and check_no = #{check_no}</if>
<if test="dept_id != null">and dept_id = #{dept_id}</if>
<if test="sample_id != null">and sample_id = #{sample_id}</if>
<if test="bill_status != null">and bill_status = #{bill_status}</if>
<if test="match_sign != null">and match_sign = #{match_sign}</if>
</where>
</select>
</mapper>

View 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>

View File

@ -0,0 +1,71 @@
<?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>
<update id="update">
update xk_msg_main set
<if test="accept_Person != null"> accept_Person = #{accept_Person},</if>
<if test="accept_Date != null"> accept_Date = #{accept_Date},</if>
<if test="read_Flag != null"> read_Flag = #{read_Flag},</if>
<if test="send_Flag != null"> send_Flag = #{send_Flag},</if>
<if test="accept_Flag != null"> accept_Flag = #{accept_Flag},</if>
Msg_Type = #{msg_Type}
where msgid = #{msgid}
</update>
<update id="batchUpdateFlag">
update xk_msg_main set Read_Flag = 'Y', accept_Person = #{accept_Person}, accept_Date = #{accept_Date}
where msgid in
<foreach collection="msgVOList" item="msgid" open="(" separator="," close=")">
#{msgid}
</foreach>
</update>
<select id="queryOne" resultType="com.czblood.bus.pojo.XkMsgMain">
select * from xk_msg_main where msgid = #{msgId}
</select>
<select id="queryList" resultType="com.czblood.bus.pojo.XkMsgMain">
select * from xk_msg_main
<where>
<if test="accept_Dept != null">and accept_Dept = #{accept_Dept}</if>
<if test="send_Person != null">and send_Person = #{send_Person}</if>
<if test="accept_Person != null">and accept_Person = #{accept_Person}</if>
<if test="read_Flag != null">and read_Flag = #{read_Flag}</if>
<if test="send_Flag != null">and send_Flag = #{send_Flag}</if>
<if test="accept_Flag != null">and accept_Flag = #{accept_Flag}</if>
<if test="msg_Type != null">and msg_Type = #{msg_Type}</if>
<if test="msg_Kind != null">and msg_Kind = #{msg_Kind}</if>
<if test="msgid != null">and msgid = #{msgid}</if>
<if test="sWriteDate != null"><![CDATA[and write_Date >= #{sWriteDate} ]]></if>
<if test="eWriteDate != null"><![CDATA[and write_Date <= #{eWriteDate} ]]></if>
</where>
</select>
<select id="queryNoReadCount" resultType="java.lang.Integer">
select count(*) as noReadCount from xk_msg_main where isnull(read_Flag, 'N') = 'N'
</select>
</mapper>

View File

@ -0,0 +1,65 @@
<?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.XkOutDetailMapper">
<insert id="insert">
insert into xk_out_detail (
<if test="blood_no != null">blood_no,</if>
<if test="price != null">price,</if>
<if test="special_deal != null">special_deal,</if>
<if test="have_reaction != null">have_reaction,</if>
<if test="finish_sign != null">finish_sign,</if>
<if test="accept_flag != null">accept_flag,</if>
<if test="exp1 != null">exp1,</if>
<if test="exp2 != null">exp2,</if>
<if test="exp3 != null">exp3,</if>
<if test="remark != null">remark,</if>
<if test="accept_dept != null">accept_dept,</if>
<if test="product_no != null">product_no,</if>
bill_no,sid
)values (
<if test="blood_no != null">#{blood_no},</if>
<if test="price != null">#{price},</if>
<if test="special_deal != null">#{special_deal},</if>
<if test="have_reaction != null">#{have_reaction},</if>
<if test="finish_sign != null">#{finish_sign},</if>
<if test="accept_flag != null">#{accept_flag},</if>
<if test="exp1 != null">#{exp1},</if>
<if test="exp2 != null">#{exp2},</if>
<if test="exp3 != null">#{exp3},</if>
<if test="remark != null">#{remark},</if>
<if test="accept_dept != null">#{accept_dept},</if>
<if test="product_no != null">#{product_no},</if>
#{bill_no},#{sid} )
</insert>
<update id="update">
update xk_out_detail set
<if test="price != null">price = #{price},</if>
<if test="special_deal != null">special_deal = #{special_deal},</if>
<if test="have_reaction != null">have_reaction = #{have_reaction},</if>
<if test="finish_sign != null">finish_sign = #{finish_sign},</if>
<if test="accept_flag != null">accept_flag = #{accept_flag},</if>
<if test="exp1 != null">exp1 = #{exp1},</if>
<if test="exp2 != null">exp2 = #{exp2},</if>
<if test="exp3 != null">exp3 = #{exp3},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="accept_dept != null">accept_dept = #{accept_dept},</if>
blood_no = #{blood_no},product_no = #{product_no}
where bill_no = #{bill_no} and blood_no = #{blood_no} and product_no = #{product_no}
</update>
<delete id="deleteByBillNo">
delete from xk_out_detail where bill_no = #{billNo}
</delete>
<select id="queryListByBillNo" resultType="com.czblood.bus.pojo.XkOutDetail">
select * from xk_out_detail where bill_no = #{billNo}
</select>
<select id="queryList" resultType="com.czblood.bus.pojo.XkOutDetail">
select * from xk_out_detail
<where>
<if test="blood_no != null">and blood_no = #{blood_no}</if>
<if test="product_no != null">and product_no = #{product_no}</if>
</where>
</select>
</mapper>

View File

@ -2,8 +2,110 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.czblood.bus.mapper.XkOutMainMapper">
<insert id="insert">
insert into xk_out_main (
<if test="total_money != null">total_money,</if>
<if test="take_person != null">take_person,</if>
<if test="handle_person != null">handle_person,</if>
<if test="apply_no != null">apply_no,</if>
<if test="match_no != null">match_no,</if>
<if test="patient_name != null">patient_name,</if>
<if test="beinhos_id != null">beinhos_id,</if>
<if test="dept_id != null">dept_id,</if>
<if test="check_no != null">check_no,</if>
<if test="bill_sort != null">bill_sort,</if>
<if test="notify_time != null">notify_time,</if>
<if test="is_free_account != null">is_free_account,</if>
<if test="input_person != null">input_person,</if>
<if test="input_date != null">input_date,</if>
<if test="check_sign != null">check_sign,</if>
<if test="check_person != null">check_person,</if>
<if test="check_date != null">check_date,</if>
<if test="audit_person != null">audit_person,</if>
<if test="remark != null">remark,</if>
<if test="exp1 != null">exp1,</if>
<if test="exp2 != null">exp2,</if>
<if test="last_modified != null">last_modified,</if>
<if test="all_recycle_sign != null">all_recycle_sign,</if>
<if test="receive_person != null">receive_person,</if>
<if test="receive_id != null">receive_id,</if>
<if test="more_sign != null">more_sign,</if>
bill_no, hos_id,occur_date
)values (
<if test="total_money != null">#{total_money},</if>
<if test="take_person != null">#{take_person},</if>
<if test="handle_person != null">#{handle_person},</if>
<if test="apply_no != null">#{apply_no},</if>
<if test="match_no != null">#{match_no},</if>
<if test="patient_name != null">#{patient_name},</if>
<if test="beinhos_id != null">#{beinhos_id},</if>
<if test="dept_id != null">#{dept_id},</if>
<if test="check_no != null">#{check_no},</if>
<if test="bill_sort != null">#{bill_sort},</if>
<if test="notify_time != null">#{notify_time},</if>
<if test="is_free_account != null">#{is_free_account},</if>
<if test="input_person != null">#{input_person},</if>
<if test="input_date != null">#{input_date},</if>
<if test="check_sign != null">#{check_sign},</if>
<if test="check_person != null">#{check_person},</if>
<if test="check_date != null">#{check_date},</if>
<if test="audit_person != null">#{audit_person},</if>
<if test="remark != null">#{remark},</if>
<if test="exp1 != null">#{exp1},</if>
<if test="exp2 != null">#{exp2},</if>
<if test="last_modified != null">#{last_modified},</if>
<if test="all_recycle_sign != null">#{all_recycle_sign},</if>
<if test="receive_person != null">#{receive_person},</if>
<if test="receive_id != null">#{receive_id},</if>
<if test="more_sign != null">#{more_sign},</if>
#{bill_no}, #{hos_id}, #{occur_date}
)
</insert>
<update id="update">
update xk_out_main set
<if test="total_money != null">total_money = #{total_money},</if>
<if test="take_person != null">take_person = #{take_person},</if>
<if test="handle_person != null">handle_person = #{handle_person},</if>
<if test="apply_no != null">apply_no = #{apply_no},</if>
<if test="match_no != null">match_no = #{match_no},</if>
<if test="patient_name != null">patient_name = #{patient_name},</if>
<if test="beinhos_id != null">beinhos_id = #{beinhos_id},</if>
<if test="dept_id != null">dept_id = #{dept_id},</if>
<if test="check_no != null">check_no = #{check_no},</if>
<if test="bill_sort != null">bill_sort = #{bill_sort},</if>
<if test="notify_time != null">notify_time = #{notify_time},</if>
<if test="is_free_account != null">is_free_account = #{is_free_account},</if>
<if test="input_person != null">input_person = #{input_person},</if>
<if test="input_date != null">input_date = #{input_date},</if>
<if test="check_sign != null">check_sign = #{check_sign},</if>
<if test="check_person != null">check_person = #{check_person},</if>
<if test="check_date != null">check_date = #{check_date},</if>
<if test="audit_person != null">audit_person = #{audit_person},</if>
<if test="remark != null">remark = #{remark},</if>
<if test="exp1 != null">exp1 = #{exp1},</if>
<if test="exp2 != null">exp2 = #{exp2},</if>
<if test="last_modified != null">last_modified = #{last_modified},</if>
<if test="all_recycle_sign != null">all_recycle_sign = #{all_recycle_sign},</if>
<if test="receive_person != null">receive_person = #{receive_person},</if>
<if test="receive_id != null">receive_id = #{receive_id},</if>
<if test="more_sign != null">more_sign = #{more_sign},</if>
bill_no = #{bill_no}
where bill_no = #{bill_no}
</update>
<select id="queryOne" resultType="com.czblood.bus.pojo.XkOutMain">
select * from xk_out_main where bill_no = #{billNo}
</select>
<select id="queryList" resultType="com.czblood.bus.pojo.XkOutMain">
select * from xk_out_main
<where>
<if test="apply_no != null">and apply_no = #{apply_no}</if>
<if test="match_no != null">and match_no = #{match_no}</if>
<if test="beinhos_id != null">and beinhos_id = #{beinhos_id}</if>
<if test="check_no != null">and check_no = #{check_no}</if>
<if test="bill_sort != null">and bill_sort = #{bill_sort}</if>
<if test="input_person != null">and input_person = #{input_person}</if>
<if test="check_sign != null">and check_sign = #{check_sign}</if>
</where>
</select>
</mapper>

View File

@ -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.XkReactionMapper">
<select id="queryCount" resultType="java.lang.Integer">
select count(*) from xk_reaction where blood_no = #{bloodNo} and product_no = #{productNo}
</select>
</mapper>

View File

@ -0,0 +1,32 @@
<?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.xtwh.XkReportTemplateMapper">
<insert id="insert">
insert into xk_report_template (report_no, report_name, report_size, create_time, update_time)
values ( #{report_no}, #{report_name}, #{report_size}, #{create_time}, #{update_time})
</insert>
<update id="update">
update xk_report_template
set report_name = #{report_name},
report_size = #{report_size},
update_time = #{update_time}
where report_no = #{report_no}
</update>
<delete id="deleteByReportNo">
delete from xk_report_template where report_no = #{reportNo}
</delete>
<select id="queryOne" resultType="com.czblood.bus.pojo.xtwh.XkReportTemplate">
select * from xk_report_template
</select>
<select id="queryList" resultType="com.czblood.bus.pojo.xtwh.XkReportTemplate">
select * from xk_report_template
<where>
<if test="report_no != null">and report_no = #{report_no}</if>
<if test="report_name != null">and report_name = #{report_name}</if>
<if test="create_time != null">and create_time between #{create_time_s} and #{create_time_e}</if>
<if test="update_time != null">and update_time between #{update_time_s} and #{update_time_e}</if>
</where>
</select>
</mapper>

View File

@ -74,8 +74,15 @@
<if test="send_Nurse != null ">send_Nurse = #{send_Nurse},</if>
<if test="send_Date != null ">send_Date = #{send_Date},</if>
<if test="takeOver_Man != null ">takeOver_Man = #{takeOver_Man},</if>
<if test="takeOver_Date != null and takeOver_Date != '1900-01-01' ">takeOver_Date = #{takeOver_Date},</if>
<if test="takeOver_Date != null and takeOver_Date == '1900-01-01' ">takeOver_Date = null,</if>
<if test="takeOver_Date != null">
<!-- 时间戳0代表要置null -->
<if test="takeOver_Date.time == 0">
takeOver_Date = null,
</if>
<if test="takeOver_Date.time != 0">
takeOver_Date = #{takeOver_Date},
</if>
</if>
<if test="overdue_Flag != null ">overdue_Flag = #{overdue_Flag},</if>
<if test="exp1 != null ">exp1 = #{exp1},</if>
<if test="exp2 != null ">exp2 = #{exp2},</if>

View File

@ -48,6 +48,9 @@
where bill_no = #{bill_no}
<if test="blood_breed != null and blood_breed != ''">and blood_breed = #{blood_breed}</if>
</update>
<delete id="deleteByBillNo">
delete from xk_transfuse_apply_bloodbreed where bill_no = #{billNo}
</delete>
<select id="queryList" resultType="com.czblood.bus.pojo.XkTransfuseApplyBloodbreed">
select * from xk_transfuse_apply_bloodbreed where bill_no = #{bill_no}
<if test="blood_breed != null and blood_breed != ''">and blood_breed = #{blood_breed}</if>

View File

@ -3,6 +3,7 @@ package com.czblood.busBloodbank.controller;
import com.czblood.bus.constants.BloodSysLogConstants;
import com.czblood.bus.pojo.XkSampleInfo;
import com.czblood.busBloodbank.pojo.VO.AcceptSampleInfoQueryVO;
import com.czblood.busBloodbank.pojo.VO.AcceptSampleInfoVO;
import com.czblood.busBloodbank.service.AcceptSampleInfoService;
import com.czblood.common.annotation.Log;
import com.czblood.common.core.controller.BaseController;
@ -11,10 +12,7 @@ import com.czblood.common.core.page.TableDataInfo;
import com.czblood.common.enums.BusinessType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@ -30,16 +28,16 @@ public class AcceptSampleInfoController extends BaseController {
@ApiOperation("标本列表查询")
@GetMapping("/queryList")
public TableDataInfo queryList(AcceptSampleInfoQueryVO acceptSampleInfoQueryVO){
public Result queryList(AcceptSampleInfoQueryVO acceptSampleInfoQueryVO){
List<Map<String,Object>> list = acceptSampleInfoService.queryList(acceptSampleInfoQueryVO);
return getDataTable(list);
return new Result("0","查询成功!",list);
}
@Log(title = BloodSysLogConstants.LOG_TYPE_ACCEPT_SAMPLE_INFO, businessType = BusinessType.INSERT)
@ApiOperation("标本接收")
@PostMapping("/acceptSampleInfo")
public Result acceptSampleInfo(XkSampleInfo xKSampleInfo){
return acceptSampleInfoService.acceptSampleInfo(xKSampleInfo);
public Result acceptSampleInfo(@RequestBody AcceptSampleInfoVO acceptSampleInfoVO){
return acceptSampleInfoService.acceptSampleInfo(acceptSampleInfoVO);
}
@ApiOperation("查询单个标本信息")
@ -50,7 +48,7 @@ public class AcceptSampleInfoController extends BaseController {
@Log(title = BloodSysLogConstants.LOG_TYPE_ACCEPT_SAMPLE_INFO, businessType = BusinessType.DELETE)
@ApiOperation("取消标本接收")
@PostMapping("/cancelSampleInfo")
@GetMapping("/cancelSampleInfo")
public Result cancelSampleInfo(String sampleNo){
return acceptSampleInfoService.cancelSampleInfo(sampleNo);
}
@ -58,7 +56,7 @@ public class AcceptSampleInfoController extends BaseController {
@Log(title = BloodSysLogConstants.LOG_TYPE_ACCEPT_SAMPLE_INFO, businessType = BusinessType.DELETE_VS)
@ApiOperation("标本退回")
@PostMapping("/backSampleInfo")
public Result backSampleInfo(AcceptSampleInfoQueryVO acceptSampleInfoQueryVO){
public Result backSampleInfo(@RequestBody AcceptSampleInfoQueryVO acceptSampleInfoQueryVO){
return acceptSampleInfoService.backSampleInfo(acceptSampleInfoQueryVO);
}

View File

@ -0,0 +1,81 @@
package com.czblood.busBloodbank.controller;
import com.czblood.bus.constants.BloodSysLogConstants;
import com.czblood.busBloodbank.pojo.DTO.BackinDataDTO;
import com.czblood.busBloodbank.pojo.VO.BackinQueryVO;
import com.czblood.busBloodbank.service.BackinService;
import com.czblood.common.annotation.Log;
import com.czblood.common.core.controller.BaseController;
import com.czblood.common.core.domain.Result;
import com.czblood.common.core.page.TableDataInfo;
import com.czblood.common.enums.BusinessType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@Api(tags = "临床发血退血")
@RestController
@RequestMapping("/bus/bloodbank/backin")
public class BackinController extends BaseController {
@Resource
private BackinService backinService;
@ApiOperation("获取血液信息")
@GetMapping("/queryBloodInfo")
public Result queryBloodInfo(String bloodNo,String productNo){
return backinService.queryBloodInfo(bloodNo,productNo);
}
@Log(title = BloodSysLogConstants.LOG_TYPE_BLOOD_BACK, businessType = BusinessType.INSERT)
@ApiOperation("保存数据")
@PostMapping("/saveData")
public Result saveData(@RequestBody BackinDataDTO backinDataDTO){
backinDataDTO.setUserId(getUsername());
return backinService.saveData(backinDataDTO);
}
@Log(title = BloodSysLogConstants.LOG_TYPE_BLOOD_OUT, businessType = BusinessType.CHECK)
@ApiOperation("审核数据")
@GetMapping("/auditData")
public Result auditData(String billNo){
String userId = getUsername();
return backinService.auditData(billNo,userId);
}
@Log(title = BloodSysLogConstants.LOG_TYPE_BLOOD_BACK, businessType = BusinessType.DELETE)
@ApiOperation("删除单据")
@GetMapping("/deleteData")
public Result deleteData(String billNo){
return backinService.deleteData(billNo);
}
@ApiOperation("查询列表")
@GetMapping("/queryList")
public TableDataInfo queryList(BackinQueryVO backinQueryVO){
startPage();
List<Map<String,Object>> list = backinService.queryList(backinQueryVO);
return getDataTable(list);
}
@ApiOperation("查询单个申请单信息")
@GetMapping("/queryInfo")
public Result queryInfo(String billNo){
return backinService.queryInfo(billNo);
}
@ApiOperation("打印单据")
@GetMapping("/print")
public Result print(@ApiParam(value = "单据编号", required = true) String billNo, @ApiParam(value = "模板名称:BLOOD_OUT_BACK(退血单)", required = true) String templateName){
String userName = getLoginUser().getUser().getNickName();
return backinService.print(billNo,templateName,userName);
}
}

View File

@ -0,0 +1,108 @@
package com.czblood.busBloodbank.controller;
import com.czblood.bus.constants.BloodSysLogConstants;
import com.czblood.busBloodbank.pojo.VO.BloodOutAuditVO;
import com.czblood.busBloodbank.pojo.VO.BloodOutInfoVO;
import com.czblood.busBloodbank.pojo.VO.BloodOutMoreQueryVO;
import com.czblood.busBloodbank.pojo.VO.BloodOutQueryVO;
import com.czblood.busBloodbank.service.BloodOutService;
import com.czblood.common.annotation.Log;
import com.czblood.common.core.controller.BaseController;
import com.czblood.common.core.domain.Result;
import com.czblood.common.enums.BusinessType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@Api(tags = "临床发血")
@RestController
@RequestMapping("/bus/bloodbank/bloodOut")
public class BloodOutController extends BaseController {
@Resource
private BloodOutService bloodOutService;
/**
* 多次发血,moreSign = Y
* @param applyNo
* @param moreSign
* @return
*/
@ApiOperation("查询申请单数据")
@GetMapping("/queryOne")
public Result queryOne(String applyNo,String moreSign){
return bloodOutService.queryOne(applyNo,moreSign);
}
@ApiOperation("查询待处理申请单数据")
@GetMapping("/queryWaitInfo")
public Result queryWaitInfo(){
return bloodOutService.queryWaitInfo();
}
@ApiOperation("获取发血数据")
@GetMapping("/getBloodInfoOut")
public Result getBloodInfoOut(String bloodNo,String productNo,String applyNo){
return bloodOutService.getBloodInfoOut(bloodNo, productNo, applyNo);
}
@Log(title = BloodSysLogConstants.LOG_TYPE_BLOOD_OUT, businessType = BusinessType.INSERT)
@ApiOperation("保存数据")
@PostMapping("/saveData")
public Result saveData(@RequestBody BloodOutInfoVO bloodOutInfoVO){
bloodOutInfoVO.setUserId(getUsername());
return bloodOutService.saveData(bloodOutInfoVO);
}
@Log(title = BloodSysLogConstants.LOG_TYPE_BLOOD_OUT, businessType = BusinessType.CHECK)
@ApiOperation("临床发血审核")
@PostMapping("/bloodOutAudit")
public Result bloodOutAudit(@RequestBody BloodOutAuditVO bloodOutAuditVO){
bloodOutAuditVO.setUserId(getUsername());
return bloodOutService.bloodOutAudit(bloodOutAuditVO);
}
@ApiOperation("通知护士取血")
@GetMapping("/notifyMessage")
public Result notifyMessage(String billNo){
return bloodOutService.notifyMessage(billNo);
}
@ApiOperation("打印单据")
@GetMapping("/printReport")
public Result printReport(@ApiParam(value = "单据编号", required = true) String billNo,
@ApiParam(value = "模板名称:BLOOD_OUT(临床发血单)", required = true)
String templateName){
return bloodOutService.printReport(billNo, templateName);
}
@ApiOperation("查询发血单数据列表")
@PostMapping("/queryList")
public Result queryList(@RequestBody BloodOutQueryVO bloodOutQueryVO){
return bloodOutService.queryList(bloodOutQueryVO);
}
@ApiOperation("查询单条发血单数据")
@GetMapping("/queryInfo")
public Result queryInfo(String billNo){
return bloodOutService.queryInfo(billNo);
}
// @ApiOperation("多次发血")
// @GetMapping("/moreBloodOut")
// public Result moreBloodOut(){
// return null;
// }
@ApiOperation("查询多次发血单数据列表")
@GetMapping("/queryMoreBloodOutList")
public Result queryMoreBloodOutList(BloodOutMoreQueryVO bloodOutMoreQueryVO){
return bloodOutService.queryMoreBloodOutList(bloodOutMoreQueryVO);
}
}

View File

@ -1,6 +1,7 @@
package com.czblood.busBloodbank.controller;
import com.czblood.bus.constants.BloodSysLogConstants;
import com.czblood.busBloodbank.pojo.VO.CheckBloodTypeListQueryVO;
import com.czblood.busBloodbank.pojo.VO.HistoryQueryVO;
import com.czblood.busBloodbank.pojo.VO.XkCheckBloodtypeVO;
import com.czblood.busBloodbank.service.CheckBloodTypeService;
@ -11,6 +12,7 @@ import com.czblood.common.core.page.TableDataInfo;
import com.czblood.common.enums.BusinessType;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.v3.oas.annotations.Parameter;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@ -59,6 +61,18 @@ public class CheckBloodTypeController extends BaseController {
return getDataTable(mapList);
}
@ApiOperation("检索血型复核记录")
@GetMapping("/queryList")
public Result queryList(CheckBloodTypeListQueryVO checkBloodTypeListQueryVO){
return checkBloodTypeService.queryList(checkBloodTypeListQueryVO);
}
@ApiOperation("查询单个血型复核单据详情")
@GetMapping("/queryOneInfo")
public Result queryOneInfo(@Parameter(description = "血型复核单据编号") String billNo, @Parameter(description = "申请编号") String applyNo){
return checkBloodTypeService.queryOneInfo(billNo,applyNo);
}
}

View File

@ -0,0 +1,27 @@
package com.czblood.busBloodbank.controller;
import com.czblood.busBloodbank.service.DiscardMainService;
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/discardMain")
public class DiscardMainController {
@Resource
private DiscardMainService discardMainService;
@ApiOperation("查询血液信息")
@GetMapping("/queryBloodInfo")
public Result queryBloodInfo(String bloodNo,String productNo){
return discardMainService.queryBloodInfo(bloodNo,productNo);
}
}

View File

@ -1,24 +1,29 @@
package com.czblood.busBloodbank.controller;
import com.czblood.bus.constants.BloodSysLogConstants;
import com.czblood.busBloodbank.pojo.VO.MatchBloodListQueryVO;
import com.czblood.busBloodbank.pojo.VO.MatchBloodStockQueryVO;
import com.czblood.busBloodbank.pojo.VO.MatchBloodVO;
import com.czblood.busBloodbank.service.MatchBloodService;
import com.czblood.common.annotation.Log;
import com.czblood.common.core.controller.BaseController;
import com.czblood.common.core.domain.Result;
import com.czblood.common.enums.BusinessType;
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 org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@Api(tags = "交叉配血")
@RestController
@RequestMapping("/bus/bloodbank/matchBlood")
public class MatchBloodController {
public class MatchBloodController extends BaseController {
@Resource
MatchBloodService matchBloodService;
@ApiOperation("获取单条数据")
@ApiOperation("获取申请单数据")
@GetMapping("/queryOne")
public Result queryOne(String billNo){
return matchBloodService.queryOne(billNo);
@ -29,4 +34,73 @@ public class MatchBloodController {
public Result queryWaitInfo(){
return matchBloodService.queryWaitInfo();
}
/**
* 先调用公共血液信息,确定某一条血液信息之后,再调用此接口
* 前端:录入血液的时候,要判断血液是否已经录入,有若干血液提示需要前端写
* @param bloodNo
* @param productNo
* @return
*/
@ApiOperation("获取血液信息")
@GetMapping("/getBloodInfoMatch")
public Result getBloodInfoMatch(String bloodNo,String productNo){
return matchBloodService.getBloodInfoMatch(bloodNo, productNo);
}
@ApiOperation("取消血液配血")
@GetMapping("/cancelBloodInfoMatch")
public Result cancelBloodInfoMatch(String bloodNo,String productNo){
return matchBloodService.cancelBloodInfoMatch(bloodNo, productNo);
}
@Log(title = BloodSysLogConstants.LOG_TYPE_MATCH_BLOOD, businessType = BusinessType.INSERT)
@ApiOperation("保存数据")
@PostMapping("/saveData")
public Result saveData(@RequestBody MatchBloodVO matchBloodVO){
matchBloodVO.setUserId(getUsername());
return matchBloodService.saveData(matchBloodVO);
}
@Log(title = BloodSysLogConstants.LOG_TYPE_MATCH_BLOOD, businessType = BusinessType.DELETE)
@ApiOperation("作废配血单")
@GetMapping("/deleteBloodInfoMatch")
public Result deleteBloodInfoMatch(String billNo){
return matchBloodService.deleteBloodInfoMatch(billNo);
}
@ApiOperation("查询血液库存")
@GetMapping("/queryBloodStock")
public Result queryBloodStock(MatchBloodStockQueryVO matchBloodStockQueryVO){
return matchBloodService.queryBloodStock(matchBloodStockQueryVO);
}
@ApiOperation("查询检验结果")
@GetMapping("/queryListResult")
public Result queryLisResult(String billNo){
return matchBloodService.queryLisResult(billNo);
}
@ApiOperation("获取交叉配血列表")
@GetMapping("/queryMatchBloodList")
public Result queryMatchBloodList(MatchBloodListQueryVO matchBloodListQueryVO){
return matchBloodService.queryMatchBloodList(matchBloodListQueryVO);
}
@ApiOperation("校验该血液是否已经存在配血数据")
@GetMapping("/checkBloodMatched")
public Result checkBloodMatched(String bloodNo,String productNo,String billNo){
return matchBloodService.checkBloodMatched(bloodNo, productNo, billNo);
}
@ApiOperation("查询单条数据")
@GetMapping("/queryApplyInfo")
public Result queryApplyInfo(String billNo,String applyNo){
return matchBloodService.queryApplyInfo(billNo,applyNo);
}
}

View File

@ -0,0 +1,60 @@
package com.czblood.busBloodbank.controller;
import com.czblood.bus.pojo.XkMsgMain;
import com.czblood.busBloodbank.pojo.DTO.MsgDTO;
import com.czblood.busBloodbank.pojo.VO.MsgBatchVO;
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.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@Api(tags = "消息系统")
@RestController
@RequestMapping("/bus/bloodbank/msg")
public class MsgController extends BaseController {
@Resource
MsgService msgService;
@ApiOperation("查询消息列表")
@GetMapping("/queryMsgList")
public TableDataInfo queryMsgList(XkMsgMain xkMsgMain){
startPage();
List<Map<String, Object>> msgMainList = msgService.queryMsgList(xkMsgMain);
return getDataTable(msgMainList);
}
@ApiOperation("获取某个消息详情")
@GetMapping("/queryOne")
public Result queryOne(int msgId){
return msgService.queryOne(msgId);
}
@ApiOperation("获取未读消息数量")
@GetMapping("/queryNoReadCount")
public Result queryNoReadCount(){
return msgService.queryNoReadCount();
}
@ApiOperation("更新消息状态")
@GetMapping("/updateFlag")
public Result updateFlag(MsgVO msgVO){
return msgService.updateFlag(msgVO);
}
@ApiOperation("批量更新消息状态")
@PostMapping("/batchUpdateFlag")
public Result batchUpdateFlag(@RequestBody MsgBatchVO msgBatchVO){
return msgService.batchUpdateFlag(msgBatchVO);
}
}

View File

@ -0,0 +1,45 @@
package com.czblood.busBloodbank.controller.xtwh;
import com.czblood.bus.pojo.xtwh.XkReportTemplate;
import com.czblood.busBloodbank.service.XkReportTemplateService;
import com.czblood.common.core.domain.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@Api(tags = "打印模版维护")
@RestController
@RequestMapping("/bus/bloodbank/xkReportTemplate")
public class XkReportTemplateController {
@Resource
XkReportTemplateService xkReportTemplateService;
@ApiOperation("查询列表")
@PostMapping("/queryList")
public Result queryList(@RequestBody XkReportTemplate xkReportTemplate){
return xkReportTemplateService.queryList(xkReportTemplate);
}
@ApiOperation("新增模版")
@PostMapping("/add")
public Result add(@RequestBody XkReportTemplate xkReportTemplate){
return xkReportTemplateService.add(xkReportTemplate);
}
@ApiOperation("更新模版")
@PostMapping("/update")
public Result update(@RequestBody XkReportTemplate xkReportTemplate){
return xkReportTemplateService.update(xkReportTemplate);
}
@ApiOperation("删除模版")
@GetMapping("/delete")
public Result delete(String reportNo){
return xkReportTemplateService.delete(reportNo);
}
}

View File

@ -0,0 +1,17 @@
package com.czblood.busBloodbank.mapper;
import com.czblood.bus.pojo.XkOutDetail;
import com.czblood.busBloodbank.pojo.VO.BackinQueryVO;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
import java.util.Map;
public interface BackinMapper {
List<XkOutDetail> queryXkOutDetailList(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
Date queryOutMainDate(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
List<Map<String, Object>> queryPatientInfo(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
List<Map<String,Object>> queryList(BackinQueryVO backinQueryVO);
String queryMaxApplyNo(@Param("beinhos_id") String beinhos_id,@Param("bloodNo") String bloodNo, @Param("productNo")String productNo);
}

View File

@ -0,0 +1,29 @@
package com.czblood.busBloodbank.mapper;
import com.czblood.bus.pojo.*;
import com.czblood.busBloodbank.pojo.VO.BloodOutMoreQueryVO;
import com.czblood.busBloodbank.pojo.VO.BloodOutQueryVO;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
import java.util.Map;
public interface BloodOutMapper {
int queryApplyBloodTypeCount(String billNo);
List<Map<String,Object>> queryApplyInfo(String billNo);
List<Map<String,Object>> queryWaitInfo();
List<XkBackoutDetail> queryBloodBackOutCount(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
List<Map<String,Object>> queryBloodOutInfoCount(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
List<XkDiscardMain> queryDiscardCount(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
List<Map<String,Object>> queryMatchBloodInfo(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo, @Param("applyNo") String applyNo);
XkMatchMain queryXkMatchMain(String applyNo);
String queryMaxCheckNo(String applyNo);
Date querySampleMaxPickDate(String applyNo);
List<XkCheckBloodtype> queryCheckBloodtype(String applyNo);
List<Map<String,Object>> queryList(BloodOutQueryVO bloodOutQueryVO);
List<Map<String,Object>> queryStockInfo(String applyNo);
List<Map<String,Object>> queryMoreBloodOutList(BloodOutMoreQueryVO bloodOutMoreQueryVO);
List<Map<String,Object>> queryApplyInfoOne(String billNo);
}

View File

@ -1,14 +1,18 @@
package com.czblood.busBloodbank.mapper;
import com.czblood.bus.pojo.XkCheckBloodtype;
import com.czblood.busBloodbank.pojo.VO.CheckBloodTypeListQueryVO;
import com.czblood.busBloodbank.pojo.VO.HistoryQueryVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
public interface CheckBloodTypeMapper {
List<Map<String,Object>> queryWaitInfo(String bbjszhxxfh);
List<Map<String,Object>> queryWaitInfo(@Param("bbjszhxxfh") Integer bbjszhxxfh);
int checkMatchedBloodNotOut(String billNo);
List<Map<String,Object>> queryOne(String billNo);
int queryOutMainCount(String billNo);
List<Map<String,Object>> queryHistoryInfo(HistoryQueryVO historyQueryVO);
List<XkCheckBloodtype> queryList(CheckBloodTypeListQueryVO checkBloodTypeListQueryVO);
}

View File

@ -1,5 +1,10 @@
package com.czblood.busBloodbank.mapper;
import com.czblood.bus.pojo.XkBloodInfo;
import com.czblood.busBloodbank.pojo.VO.MatchBloodListQueryVO;
import com.czblood.busBloodbank.pojo.VO.MatchBloodStockQueryVO;
import org.apache.ibatis.annotations.Param;
import java.util.Date;
import java.util.List;
import java.util.Map;
@ -9,4 +14,22 @@ public interface MatchBloodMapper {
int checkMatchBloodNotOut(String billNo);
int queryCheckBloodTypeCount(String applyNo);
Date querySampleMaxDate(String applyNo);
List<Map<String,Object>> queryMatchMainInfo(String applyNo);
int queryOutCount(@Param("billNo") String billNo, @Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
int queryBloodOutCount(@Param("billNo") String billNo, @Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
int queryBackOutCount(@Param("billNo") String billNo, @Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
int queryBackOutCount1(@Param("billNo") String billNo, @Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
int queryBloodOutHosCount(@Param("billNo") String billNo, @Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
int queryOutCountTwo(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
int queryBloodOutTwo(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
int queryBackOutCountTwo(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
int queryBloodOutHosCountTwo(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
String checkBloodNeedMatch(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
int queryOutCountThree(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
String queryChargeMainBillNo(String billNo);
List<Map<String,Object>> queryBloodStock(MatchBloodStockQueryVO matchBloodStockQueryVO);
List<Map<String,Object>> querySearchBloodLastMatchDate();
List<Map<String,Object>> queryMatchBloodList(MatchBloodListQueryVO matchBloodListQueryVO);
List<Map<String,Object>> queryBloodMatchOthers(@Param("billNo") String billNo, @Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
List<Map<String,Object>> queryMatchDetailInfo(String billNo);
}

View File

@ -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<Map<String,Object>> queryMapList(XkMsgMain xkMsgMain);
}

Some files were not shown because too many files have changed in this diff Show More