输血弹窗提示,大量用血申请模版

This commit is contained in:
jiangs 2026-07-22 17:31:08 +08:00
parent 186b154275
commit 95d997467f
15 changed files with 308 additions and 10 deletions

7
.idea/MarsCodeWorkspaceAppSettings.xml generated Normal file
View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="com.codeverse.userSettings.MarscodeWorkspaceAppSettingsState">
<option name="chatAppRouterInfo" value="chat-session" />
<option name="progress" value="1.0" />
</component>
</project>

View File

@ -16,4 +16,8 @@ public class BloodPrintTypeConstants {
* 知情同意书2
*/
public static final String INFORMED_CONSENT_2 = "INFORMED_CONSENT_2";
/**
* 大量用血审批单
*/
public static final String LARGE_APPLY = "LARGE_APPLY";
}

View File

@ -2,8 +2,11 @@ package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkTransfuseApplyApproval;
import java.util.List;
public interface XkTransfuseApplyApprovalMapper {
XkTransfuseApplyApproval queryOneByBillNo(String billNo);
List<XkTransfuseApplyApproval> queryList(XkTransfuseApplyApproval xkTransfuseApplyApproval);
void insert(XkTransfuseApplyApproval xkTransfuseApplyApproval);
void update(XkTransfuseApplyApproval xkTransfuseApplyApproval);
void delete(String billNo);

View File

@ -14,4 +14,5 @@ import java.util.Date;
public class ReportParam {
private String billNo;
private String beinhosId;
private String bloodSum;
}

View File

@ -40,6 +40,13 @@
<select id="queryOneByBillNo" resultType="com.czblood.bus.pojo.XkTransfuseApplyApproval">
select * from xk_transfuse_apply_approval where bill_no = #{billNo}
</select>
<select id="queryList" resultType="com.czblood.bus.pojo.XkTransfuseApplyApproval">
select * from xk_transfuse_apply_approval
<where>
<if test="bill_no != null and bill_no != ''">and bill_no = #{bill_no}</if>
<if test="ApplyLevel != null and ApplyLevel != ''">and ApplyLevel = #{ApplyLevel}</if>
</where>
</select>
</mapper>

View File

@ -0,0 +1,39 @@
package com.czblood.busBloodbank.controller;
import com.czblood.busBloodbank.service.BimStipsService;
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/stips")
public class BimStipsController {
@Resource
private BimStipsService bimStipsService;
@ApiOperation("查询列表数据,医生站,血型总量类型")
@GetMapping("/queryListByDoctor")
public Result queryListByDoctor(){
return bimStipsService.queryListByDoctor();
}
@ApiOperation("查询列表数据,输血科,血液品种总量类型")
@GetMapping("/queryListByBlood")
public Result queryListByBlood(){
return bimStipsService.queryListByBlood();
}
@ApiOperation("查询过期血液")
@GetMapping("/queryExpiredBlood")
public Result queryExpiredBlood(){
return bimStipsService.queryExpiredBlood();
}
}

View File

@ -0,0 +1,10 @@
package com.czblood.busBloodbank.mapper;
import java.util.List;
import java.util.Map;
public interface BimStipsMapper {
List<Map<String,Object>> queryListByDoctor();
List<Map<String,Object>> queryListByBlood();
List<Map<String,Object>> queryExpiredBlood(Long day);
}

View File

@ -0,0 +1,12 @@
package com.czblood.busBloodbank.service;
import com.czblood.common.core.domain.Result;
public interface BimStipsService {
Result queryListByDoctor();
Result queryListByBlood();
Result queryExpiredBlood();
}

View File

@ -0,0 +1,39 @@
package com.czblood.busBloodbank.service.impl;
import com.czblood.bus.utils.BloodBankUtil;
import com.czblood.busBloodbank.mapper.BimStipsMapper;
import com.czblood.busBloodbank.service.BimStipsService;
import com.czblood.common.core.domain.Result;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
import java.util.Map;
@Service
public class BimStipsServiceImpl implements BimStipsService {
@Resource
BimStipsMapper bimStipsMapper;
@Resource
BloodBankUtil bloodBankUtil;
@Override
public Result queryListByDoctor() {
List<Map<String, Object>> mapList = bimStipsMapper.queryListByDoctor();
return new Result("0", "操作成功", mapList);
}
@Override
public Result queryListByBlood() {
List<Map<String, Object>> mapList = bimStipsMapper.queryListByBlood();
return new Result("0", "操作成功", mapList);
}
@Override
public Result queryExpiredBlood() {
String deadlinecheck = bloodBankUtil.getParameterValue("DEADLINECHECK");
List<Map<String, Object>> mapList = bimStipsMapper.queryExpiredBlood(Long.parseLong(deadlinecheck));
return new Result("0", "操作成功", mapList);
}
}

View File

@ -0,0 +1,97 @@
<?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.busBloodbank.mapper.BimStipsMapper">
<select id="queryListByDoctor" resultType="java.util.Map">
<![CDATA[
SELECT a.blood_type AS BloodAbo ,
a.blood_type+'型' as BloodAboName ,
a.sl AS amount ,
1 AS ShowType ,
1 AS ShowMode ,
'' AS BackText ,
( CASE WHEN a.sl < b.Stock_Lower THEN '紧缺'
WHEN a.sl BETWEEN b.Stock_Lower AND b.Stock_Upper THEN '偏少'
WHEN a.sl > b.Stock_Upper THEN '充裕' end
) AS TipsText ,
( CASE WHEN a.sl < b.Stock_Lower THEN '926688'
WHEN a.sl BETWEEN b.Stock_Lower AND b.Stock_Upper THEN '6655839'
WHEN a.sl > b.Stock_Upper THEN '3794950' end
) AS TipsColor
FROM v_blood_bimsshowstock AS a
INNER JOIN (SELECT blood_type,SUM(Stock_Lower) AS Stock_Lower,SUM(Stock_Upper) AS Stock_Upper FROM dbo.xk_blood_lack GROUP BY blood_type
) b ON (b.blood_type = a.blood_type)
ORDER BY BloodAbo ,BloodAboName
]]>
</select>
<select id="queryListByBlood" resultType="java.util.Map">
<![CDATA[
select a.blood_kind AS ClassCode,a.wordbook_name AS ClassName,
a.AmountA AS AmountA,
(CASE WHEN a.AmountA < b.Stock_LowerA THEN '紧缺'
WHEN a.AmountA BETWEEN b.Stock_LowerA AND b.Stock_UpperA THEN '偏少'
WHEN a.AmountA > b.Stock_UpperA THEN '充裕' end ) as TipsAText,
(CASE WHEN a.AmountA < b.Stock_LowerA THEN '926688'
WHEN a.AmountA BETWEEN b.Stock_LowerA AND b.Stock_UpperA THEN '6655839'
WHEN a.AmountA > b.Stock_UpperA THEN '3794950' end ) as TipsAColor,
'' as BackAText,
a.AmountB AS AmountB,
(CASE WHEN a.AmountB < b.Stock_LowerB THEN '紧缺'
WHEN a.AmountB BETWEEN b.Stock_LowerB AND b.Stock_UpperB THEN '偏少'
WHEN a.AmountB > b.Stock_UpperB THEN '充裕' end) as TipsBText,
(CASE WHEN a.AmountB < b.Stock_LowerB THEN '926688'
WHEN a.AmountB BETWEEN b.Stock_LowerB AND b.Stock_UpperB THEN '6655839'
WHEN a.AmountB > b.Stock_UpperB THEN '3794950' end ) as TipsBColor,
'' as BackBText,
a.AmountAB AS AmountAB,
(CASE WHEN a.AmountAB < b.Stock_LowerAB THEN '紧缺'
WHEN a.AmountAB BETWEEN b.Stock_LowerAB AND b.Stock_UpperAB THEN '偏少'
WHEN a.AmountAB > b.Stock_UpperAB THEN '充裕' end) as TipsABText,
(CASE WHEN a.AmountAB < b.Stock_LowerAB THEN '926688'
WHEN a.AmountAB BETWEEN b.Stock_LowerAB AND b.Stock_UpperAB THEN '6655839'
WHEN a.AmountAB > b.Stock_UpperAB THEN '3794950' end) as TipsABColor,
'' as BackABText,
a.AmountO AS AmountO,
(CASE WHEN a.AmountO < b.Stock_LowerO THEN '紧缺'
WHEN a.AmountO BETWEEN b.Stock_LowerO AND b.Stock_UpperO THEN '偏少'
WHEN a.AmountO> b.Stock_UpperO THEN '充裕' end) as TipsOText,
(CASE WHEN a.AmountO < b.Stock_LowerO THEN '926688'
WHEN a.AmountO BETWEEN b.Stock_LowerO AND b.Stock_UpperO THEN '6655839'
WHEN a.AmountO > b.Stock_UpperO THEN '3794950' end) as TipsOColor,
'' as BackOText
FROM (SELECT d.blood_kind,d.wordbook_name,
sum((CASE WHEN d.blood_type = 'A' THEN d.sl ELSE 0 end)) AS AmountA,
sum((CASE WHEN d.blood_type = 'B' THEN d.sl ELSE 0 end)) AS AmountB,
sum((CASE WHEN d.blood_type = 'AB' THEN d.sl ELSE 0 end)) AS AmountAB,
sum((CASE WHEN d.blood_type = 'O' THEN d.sl ELSE 0 end)) AS AmountO
FROM v_blood_bimsshowstock_blood d
GROUP BY d.blood_kind,d.wordbook_name) a
INNER JOIN (SELECT f.blood_kind AS blood_kind,f.wordbook_name AS wordbook_name,
sum((CASE WHEN c.blood_type = 'A' THEN c.Stock_Lower ELSE 0 end)) AS Stock_LowerA,
sum((CASE WHEN c.blood_type = 'A' THEN c.Stock_Upper ELSE 0 end)) AS Stock_UpperA,
sum((CASE WHEN c.blood_type = 'B' THEN c.Stock_Lower ELSE 0 end)) AS Stock_LowerB,
sum((CASE WHEN c.blood_type = 'B' THEN c.Stock_Upper ELSE 0 end)) AS Stock_UpperB,
sum((CASE WHEN c.blood_type = 'O' THEN c.Stock_Lower ELSE 0 end)) AS Stock_LowerO,
sum((CASE WHEN c.blood_type = 'O' THEN c.Stock_Upper ELSE 0 end)) AS Stock_UpperO,
sum((CASE WHEN c.blood_type = 'AB' THEN c.Stock_Lower ELSE 0 end)) AS Stock_LowerAB,
sum((CASE WHEN c.blood_type = 'AB' THEN c.Stock_Upper ELSE 0 end)) AS Stock_UpperAB
FROM dbo.xk_blood_lack c,v_blood_breed f
WHERE c.blood_breed = f.breed_code GROUP BY f.wordbook_name,f.blood_kind) b ON (a.blood_kind = b.blood_kind )
order by a.blood_kind
]]>
</select>
<select id="queryExpiredBlood" resultType="java.util.Map">
<![CDATA[
SELECT xk_blood_info.blood_no,xk_blood_info.product_no ,xk_blood_breed.breed_name,
xk_blood_info.blood_type,xk_blood_info.rh_blood_type,
xk_blood_info.capacity,xk_blood_info.unit,
xk_blood_info.valid_date,xk_blood_info.pick_date,datediff(day,GETDATE(), xk_blood_info.valid_date) as cp_moreday
FROM xk_blood_info,xk_blood_breed WHERE xk_blood_breed.breed_code=xk_blood_info.blood_breed
AND blood_status='1' AND valid_date<GETDATE() + #{day}
]]>
</select>
</mapper>

View File

@ -1,10 +1,13 @@
package com.czblood.busDoctor.mapper;
import com.czblood.busDoctor.pojo.VO.TransfuseApplyBeforeVO;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List;
import java.util.Map;
public interface TransfuseApplyBeforeMapper {
List<Map<String,Object>> queryList(TransfuseApplyBeforeVO transfuseApplyBeforeVO);
BigDecimal getBloodSum(@Param("beinhos_id") String beinhos_id,@Param("stime") String stime,@Param("etime") String etime,@Param("bloodKindList") List<String> bloodKindList);
}

View File

@ -1,16 +1,17 @@
package com.czblood.busDoctor.service.impl;
import cn.hutool.core.codec.Base64;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import com.czblood.bus.constants.BloodPrintTypeConstants;
import com.czblood.bus.mapper.XkPatientInfoMapper;
import com.czblood.bus.mapper.XkTransfuseApplyBeforeMapper;
import com.czblood.bus.mapper.XkTransfuseApplyTestitemMapper;
import com.czblood.bus.mapper.*;
import com.czblood.bus.pojo.*;
import com.czblood.bus.pojo.inter.BeforeAssessRequest;
import com.czblood.bus.pojo.inter.GetPatientInfoRequest;
import com.czblood.bus.pojo.inter.GetTestResultRequest;
import com.czblood.bus.pojo.xtwh.XkBloodBreed;
import com.czblood.bus.pojo.xtwh.XkDmzd;
import com.czblood.bus.utils.BloodBankUtil;
import com.czblood.bus.utils.BloodInterfaceUtil;
import com.czblood.bus.utils.ReportUtil;
@ -19,6 +20,7 @@ import com.czblood.busDoctor.pojo.DTO.TransfuseApplyBeforeDTO;
import com.czblood.busDoctor.pojo.VO.TransfuseApplyBeforeVO;
import com.czblood.busDoctor.service.TransfuseApplyBeforeService;
import com.czblood.busDoctor.utils.TransfuseApplyBeforeUtil;
import com.czblood.busDoctor.utils.TransfuseApplyUtil;
import com.czblood.common.config.RuoYiConfig;
import com.czblood.common.core.domain.Result;
import com.czblood.common.utils.file.FileUtils;
@ -27,6 +29,7 @@ import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.io.File;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
@ -50,6 +53,14 @@ public class TransfuseApplyBeforeServiceImpl implements TransfuseApplyBeforeServ
ReportUtil reportUtil;
@Resource
TransfuseApplyBeforeMapper transfuseApplyBeforeMapper;
@Resource
XkTransfuseApplyApprovalMapper xkTransfuseApplyApprovalMapper;
@Resource
TransfuseApplyUtil transfuseApplyUtil;
@Resource
XkTransfuseApplyBloodbreedMapper xkTransfuseApplyBloodbreedMapper;
@Resource
XkTransfuseApplyMapper xkTransfuseApplyMapper;
@Override
public Result queryList(TransfuseApplyBeforeVO xkTransfuseApplyBeforeVO) {
@ -184,6 +195,25 @@ public class TransfuseApplyBeforeServiceImpl implements TransfuseApplyBeforeServ
log.error("合并pdf:{}报告失败:{}",mergeBgdhList,e);
return new Result("-1",e.getMessage());
}
case "LARGE_APPLY":
String dlyxspDyjb = bloodBankUtil.getParameterValue("DLYXSP_DYJB");
XkTransfuseApplyApproval xkTransfuseApplyApprovalTemp = new XkTransfuseApplyApproval();
xkTransfuseApplyApprovalTemp.setBill_no(billNo);
xkTransfuseApplyApprovalTemp.setApplyLevel(dlyxspDyjb);
List<XkTransfuseApplyApproval> xkTransfuseApplyApprovalList = xkTransfuseApplyApprovalMapper.queryList(xkTransfuseApplyApprovalTemp);
if(xkTransfuseApplyApprovalList.isEmpty()) return new Result("-1","没有大量用血审批记录,无需打印申请单!");
//24小时总血总量,包含了当前申请单的用血量
List<XkTransfuseApplyBloodbreed> xkTransfuseApplyBloodbreedList = xkTransfuseApplyBloodbreedMapper.queryOne(billNo);
List<String> largeKindStr = transfuseApplyUtil.getLargeKindStr(xkTransfuseApplyBloodbreedList);
XkTransfuseApply xkTransfuseApply = xkTransfuseApplyMapper.queryOne(billNo);
String beinhosId = xkTransfuseApply.getBeinhos_id();
String currentTimeDate = bloodBankUtil.getCurrentTime();
String stime = DateUtil.format(DateUtil.offsetDay(bloodBankUtil.getCurrentTimeDate(), -1),"yyyy-MM-dd HH:mm:ss");
BigDecimal bloodSum = transfuseApplyBeforeMapper.getBloodSum(beinhosId,stime,currentTimeDate,largeKindStr);
reportParam.setBloodSum(bloodSum.toString());
Result result2 = reportUtil.printToPdf(BloodPrintTypeConstants.LARGE_APPLY, reportParam, true);
if(!result2.getCode().equals("0")) return result2;
return new Result("0","打印成功!",BloodBankUtil.isBank(result2.getData()));
}
return new Result("-1","没有找到对应的打印模版!");

View File

@ -654,6 +654,7 @@ public class TransfuseApplyServiceImpl implements TransfuseApplyService {
public Result bloodCloseLoop(String billNo) {
List<String> applyStatusList = BloodApplyStatusConstants.values();
XkTransfuseApply xkTransfuseApply = xkTransfuseApplyMapper.queryOne(billNo);
if(xkTransfuseApply == null) return new Result("-1","没有查到该申请单的信息!");
List<ClosedLoopStatus> closedLoopStatusList = new ArrayList<>();
XkTransfuseApplyApproval xkTransfuseApplyApproval = xkTransfuseApplyApprovalMapper.queryOneByBillNo(billNo);
for (String statusName : applyStatusList) {
@ -668,7 +669,7 @@ public class TransfuseApplyServiceImpl implements TransfuseApplyService {
}
ClosedLoopStatus closedLoopStatus = new ClosedLoopStatus();
closedLoopStatus.setStatusName(statusName);
if(xkTransfuseApply == null) closedLoopStatus.setVisible("N");
closedLoopStatus.setVisible("N");
switch (statusName) {
case BloodApplyStatusConstants.BILL_STATUS_OPEN:
if(xkTransfuseApply.getApply_medic() != null && !xkTransfuseApply.getApply_medic().equals("")){
@ -684,6 +685,20 @@ public class TransfuseApplyServiceImpl implements TransfuseApplyService {
closedLoopStatus.setVisible("Y");
}
break;
case BloodApplyStatusConstants.BILL_STATUS_ARCHIATER_CHECK:
if(xkTransfuseApplyApproval.getArchiater() != null && !xkTransfuseApplyApproval.getArchiater().equals("")){
closedLoopStatus.setOccurName(xkTransfuseApplyApproval.getArchiater());
closedLoopStatus.setOccurDate(xkTransfuseApplyApproval.getArchiater_CheckTime());
closedLoopStatus.setVisible("Y");
}
break;
case BloodApplyStatusConstants.BILL_STATUS_MEDICAL_CHECK:
if(xkTransfuseApplyApproval.getMedical_Dept() != null && !xkTransfuseApplyApproval.getMedical_Dept().equals("")){
closedLoopStatus.setOccurName(xkTransfuseApplyApproval.getMedical_Dept());
closedLoopStatus.setOccurDate(xkTransfuseApplyApproval.getMedical_CheckTime());
closedLoopStatus.setVisible("Y");
}
break;
case BloodApplyStatusConstants.BILL_STATUS_BLOOD_TYPE_CHECK:
break;
case BloodApplyStatusConstants.BILL_STATUS_MATCH_CHECK:

View File

@ -48,6 +48,26 @@ public class TransfuseApplyUtil {
@Resource
XkTransfuseApplyMapper xkTransfuseApplyMapper;
/**
* 血液品种是否参与大量用血判断
* @param xkTransfuseApplyBloodbreedList
* @return
*/
public List<String> getLargeKindStr(List<XkTransfuseApplyBloodbreed> xkTransfuseApplyBloodbreedList){
List<String> bloodKindList = new ArrayList<>();
for (XkTransfuseApplyBloodbreed xkTransfuseApplyBloodbreed : xkTransfuseApplyBloodbreedList) {
String bloodBreed = xkTransfuseApplyBloodbreed.getBlood_breed();
XkBloodBreed xkBloodBreed = xkBloodBreedMapper.queryOne(bloodBreed);
XkDmzd xylxDmzd = bloodBankUtil.getDictCacheOne("xylx", xkBloodBreed.getBlood_kind());
String exp1 = BloodBankUtil.isBank(xylxDmzd.getExp1()); //是否参与大量用血计算
if(!BloodBankUtil.isBank(exp1).equals("Y")) continue;
bloodKindList.add(xkBloodBreed.getBlood_kind());
}
return bloodKindList;
}
/**
* 计算大量用血
*/
@ -66,18 +86,13 @@ public class TransfuseApplyUtil {
if(BloodBankUtil.isBank(exp2).equals("Y")) return new Result("0","抢救用血不参与大量用血计算");
//血液品种是否参与大量用血判断
BigDecimal totalApplyNum = BigDecimal.ZERO;
List<String> bloodKindList = new ArrayList<>();
List<XkTransfuseApplyBloodbreed> xkTransfuseApplyBloodbreedList = transfuseApplyDTO.getXkTransfuseApplyBloodbreedList();
List<String> bloodKindList = getLargeKindStr(xkTransfuseApplyBloodbreedList);
for (XkTransfuseApplyBloodbreed xkTransfuseApplyBloodbreed : xkTransfuseApplyBloodbreedList) {
String bloodBreed = xkTransfuseApplyBloodbreed.getBlood_breed();
BigDecimal bloodNum = xkTransfuseApplyBloodbreed.getBlood_num();
XkBloodBreed xkBloodBreed = xkBloodBreedMapper.queryOne(bloodBreed);
XkDmzd xylxDmzd = bloodBankUtil.getDictCacheOne("xylx", xkBloodBreed.getBlood_kind());
String exp1 = BloodBankUtil.isBank(xylxDmzd.getExp1()); //是否参与大量用血计算
if(!BloodBankUtil.isBank(exp1).equals("Y")) continue;
BigDecimal applyTransNum = bloodBankUtil.getApplyTransNum(bloodBreed,bloodNum);
totalApplyNum = totalApplyNum.add(applyTransNum);
bloodKindList.add(xkBloodBreed.getBlood_kind());
}
Date currentTimeDate = bloodBankUtil.getCurrentTimeDate();

View File

@ -9,4 +9,20 @@
<if test="beinhos_id != null and beinhos_id != ''">and a.beinhos_id = #{beinhos_id}</if>
<if test="patient_name != null and patient_name != ''">and b.patient_name like '%'+#{patient_name}+'%' </if>
</select>
<select id="getBloodSum" resultType="java.math.BigDecimal">
SELECT sum( CASE upper(t.unit) WHEN 'U' THEN t.blood_num*200 WHEN '治疗量' THEN t.blood_num*200 ELSE t.blood_num end ) rl_qc
FROM xk_transfuse_apply a , xk_transfuse_apply_bloodbreed t , xk_blood_breed k
WHERE a.beinhos_id = #{beinhos_id}
AND a.Bill_No =t.Bill_No
AND t.blood_breed =k.breed_code
<![CDATA[AND a.bill_stasus <> 'Z' ]]>
<if test="bloodKindList != null and bloodKindList.size() > 0">
and k.blood_kind in
<foreach collection="bloodKindList" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</if>
and a.apply_date Between #{stime} AND #{etime};
</select>
</mapper>