Compare commits

...

6 Commits

Author SHA1 Message Date
jiangs
f22d0b1382 交叉配血修改作废问题 2026-09-15 16:58:33 +08:00
jiangs
60e244bca9 修改交叉配血获取血液信息的返回值 2026-09-14 11:01:22 +08:00
jiangs
216e6b0280 血袋回收功能修改 2026-09-11 18:04:43 +08:00
jiangs
7a93c10ad0 血袋回收功能 2026-09-10 15:42:31 +08:00
jiangs
a50c2a69f4 血袋回收,修改护士工作站条码打印功能 2026-09-09 18:00:01 +08:00
jiangs
60f1dd1f1a 血液报废,血袋回收 2026-09-08 16:23:00 +08:00
47 changed files with 1002 additions and 24 deletions

View File

@ -17,4 +17,5 @@ public class BloodSysLogConstants {
public static final String LOG_TYPE_MATCH_BLOOD = "交叉配血";
public static final String LOG_TYPE_BLOOD_OUT = "临床发血";
public static final String LOG_TYPE_BLOOD_BACK = "临床发血退血";
public static final String LOG_TYPE_DISCARD_MAIN = "血液报废";
}

View File

@ -148,6 +148,7 @@ public class BloodCommonController extends BaseController {
@GetMapping("/queryBloodInfoByBloodNo")
public Result queryBloodInfoByBloodNo(String bloodNo){
List<XkBloodInfo> xkBloodInfoList = xkBloodInfoMapper.queryListByBloodNo(bloodNo);
if(xkBloodInfoList.isEmpty()) return new Result("1","未查询到该血液信息!");
return new Result("0","获取数据成功!",xkBloodInfoList);
}

View File

@ -1,7 +1,7 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkBackinDetail;
import io.lettuce.core.dynamic.annotation.Param;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -10,4 +10,4 @@ public interface XkBackinDetailMapper {
void insert(XkBackinDetail xkBackinDetail);
void deleteByBillNo(String billNo);
void deleteOne(@Param("billNo") String billNo,@Param("bloodNo") String bloodNo,@Param("productNo") String productNo);
}
}

View File

@ -1,4 +1,13 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkDiscardDetail;
import org.apache.ibatis.annotations.Param;
import java.util.List;
public interface XkDiscardDetailMapper {
XkDiscardDetail queryDiscardDetail(@Param("bloodNo") String bloodNo, @Param("productNo") String productNo);
void insert(XkDiscardDetail xkDiscardDetail);
void delete(String billNo);
List<XkDiscardDetail> queryListByBillNo(String billNo);
}

View File

@ -1,4 +1,10 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkDiscardMain;
public interface XkDiscardMainMapper {
void insert(XkDiscardMain xkDiscardMain);
XkDiscardMain queryOne(String billNo);
void update(XkDiscardMain xkDiscardMain);
void deleteByBillNo(String billNo);
}

View File

@ -0,0 +1,10 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkRecycleBagDetail;
import java.util.List;
public interface XkRecycleBagDetailMapper {
List<XkRecycleBagDetail> queryList(String billNo);
void insert(XkRecycleBagDetail xkRecycleBagDetail);
}

View File

@ -0,0 +1,8 @@
package com.czblood.bus.mapper;
import com.czblood.bus.pojo.XkRecycleBagMain;
public interface XkRecycleBagMainMapper {
XkRecycleBagMain queryOne(String billNo);
void insert(XkRecycleBagMain xkRecycleBagMain);
}

View File

@ -0,0 +1,15 @@
package com.czblood.bus.pojo.DTO;
import com.czblood.bus.pojo.XkBloodInfo;
import com.czblood.bus.pojo.xtwh.XkBloodBreed;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BloodInfoDTO {
private XkBloodInfo xkBloodInfo;
private XkBloodBreed xkBloodBreed;
}

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;
@ -16,6 +17,7 @@ public class XkDiscardDetail {
private Integer sid;
private String blood_no;
private BigDecimal price;
@ApiModelProperty("报废原因")
private String reason;
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;
@ -14,16 +15,28 @@ import java.util.Date;
@ApiModel("报废血液主表")
public class XkDiscardMain {
private String bill_no;
@ApiModelProperty("经手人")
private String handle_person;
@ApiModelProperty("总金额")
private BigDecimal total_money;
@ApiModelProperty("报废日期")
private Date discard_date;
@ApiModelProperty("输入人")
private String input_person;
@ApiModelProperty("输入日期")
private Date input_date;
@ApiModelProperty("审核人")
private String audit_person;
@ApiModelProperty("审核日期")
private Date audit_date;
@ApiModelProperty("备注")
private String remark;
@ApiModelProperty("批准人")
private String ratify_person;
@ApiModelProperty("批准人意见")
private String ratify_attitude;
@ApiModelProperty("报废途径")
private String discard_approach;
@ApiModelProperty("报废方法")
private String discard_method;
}

View File

@ -0,0 +1,30 @@
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.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("血袋回收明细表")
public class XkRecycleBagDetail {
private String bill_no;
private Integer sid;
private String blood_no;
@ApiModelProperty("接收人")
private String receive_person;
@ApiModelProperty("接收日期")
private Date receive_date;
private String Exp1;
private String Exp2;
private String product_no;
@ApiModelProperty("销毁人")
private String destroy_person;
@ApiModelProperty("销毁时间")
private Date destroy_time;
}

View File

@ -0,0 +1,30 @@
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.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("回收血液主表")
public class XkRecycleBagMain {
private String bill_no;
@ApiModelProperty("送返人")
private String send_person;
@ApiModelProperty("送返日期")
private Date send_date;
@ApiModelProperty("接收人")
private String receive_person;
@ApiModelProperty("接收日期")
private Date receive_date;
@ApiModelProperty("接收数量,总数")
private Integer sum;
private String Exp1;
private String Exp2;
private String bz1;
}

View File

@ -5,6 +5,7 @@ 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.DTO.BloodInfoDTO;
import com.czblood.bus.pojo.XkBloodInfo;
import com.czblood.bus.pojo.XkCheckBloodtype;
import com.czblood.bus.pojo.XkMatchDetail;
@ -240,4 +241,12 @@ public class BloodBankUtil {
return new Result("0","校验通过");
}
public BloodInfoDTO queryBloodInfoDTO(String bloodNo,String productNo){
XkBloodInfo xkBloodInfo = xkBloodInfoMapper.queryOne(bloodNo, productNo);
XkBloodBreed xkBloodBreed = xkBloodBreedMapper.queryOne(xkBloodInfo.getBlood_breed());
BloodInfoDTO bloodInfoDTO = new BloodInfoDTO();
bloodInfoDTO.setXkBloodInfo(xkBloodInfo);
bloodInfoDTO.setXkBloodBreed(xkBloodBreed);
return bloodInfoDTO;
}
}

View File

@ -2,5 +2,21 @@
<!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">
<insert id="insert">
insert into xk_discard_detail (
bill_no,sid,blood_no,product_no,price,reason
)values(
#{bill_no},#{sid},#{blood_no},#{product_no},#{price},#{reason}
)
</insert>
<delete id="delete">
delete from xk_discard_detail where bill_no = #{billNo}
</delete>
<select id="queryDiscardDetail" resultType="com.czblood.bus.pojo.XkDiscardDetail">
select * from xk_discard_detail where blood_no = #{bloodNo} and product_no = #{productNo}
</select>
<select id="queryListByBillNo" resultType="com.czblood.bus.pojo.XkDiscardDetail">
select * from xk_discard_detail where bill_no = #{billNo}
</select>
</mapper>

View File

@ -3,4 +3,44 @@
"http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.czblood.bus.mapper.XkDiscardMainMapper">
<insert id="insert">
insert into xk_discard_main (
<if test="remark != null">remark,</if>
<if test="ratify_person != null">ratify_person,</if>
<if test="ratify_attitude != null">ratify_attitude,</if>
<if test="discard_approach != null">discard_approach,</if>
<if test="discard_method != null">discard_method,</if>
bill_no,handle_person,total_money,input_person,input_date,discard_date
)values(
<if test="remark != null">#{remark},</if>
<if test="ratify_person != null">#{ratify_person},</if>
<if test="ratify_attitude != null">#{ratify_attitude},</if>
<if test="discard_approach != null">#{discard_approach},</if>
<if test="discard_method != null">#{discard_method},</if>
#{bill_no},#{handle_person},#{total_money},#{input_person},#{input_date},#{discard_date}
)
</insert>
<update id="update">
update xk_discard_main set
<if test="handle_person != null">handle_person = #{handle_person},</if>
<if test="total_money != null">total_money = #{total_money},</if>
<if test="discard_date != null">discard_date = #{discard_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>
<if test="ratify_person != null">ratify_person = #{ratify_person},</if>
<if test="ratify_attitude != null">ratify_attitude = #{ratify_attitude},</if>
<if test="discard_approach != null">discard_approach = #{discard_approach},</if>
<if test="discard_method != null">discard_method = #{discard_method},</if>
bill_no = #{bill_no}
where bill_no = #{bill_no}
</update>
<delete id="deleteByBillNo">
delete from xk_discard_main where bill_no = #{billNo}
</delete>
<select id="queryOne" resultType="com.czblood.bus.pojo.XkDiscardMain">
select * from xk_discard_main where bill_no = #{billNo}
</select>
</mapper>

View File

@ -0,0 +1,15 @@
<?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.XkRecycleBagDetailMapper">
<insert id="insert">
insert into xk_recycle_bag_detail (bill_no, SID, blood_no, receive_person, receive_date,product_no,destroy_person,destroy_time
)values(
#{bill_no},#{sid},#{blood_no},#{receive_person},#{receive_date},#{product_no},#{destroy_person},#{destroy_time}
)
</insert>
<select id="queryList" resultType="com.czblood.bus.pojo.XkRecycleBagDetail">
select * from xk_recycle_bag_detail where bill_no = #{billNo}
</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.XkRecycleBagMainMapper">
<insert id="insert">
insert into xk_recycle_bag_main (
<if test="Exp1 != null">Exp1,</if>
<if test="Exp2 != null">Exp2,</if>
bill_no, send_person, send_date,receive_person,receive_date,sum
)values(
<if test="Exp1 != null">#{Exp1},</if>
<if test="Exp2 != null">#{Exp2},</if>
#{bill_no},#{send_person},#{send_date},#{receive_person},#{receive_date},#{sum}
)
</insert>
<select id="queryOne" resultType="com.czblood.bus.pojo.XkRecycleBagMain">
select * from xk_recycle_bag_main where bill_no = #{billNo}
</select>
</mapper>

View File

@ -1,6 +1,7 @@
package com.czblood.busBloodbank.controller;
import com.czblood.bus.constants.BloodSysLogConstants;
import com.czblood.bus.pojo.XkBackinDetail;
import com.czblood.busBloodbank.pojo.DTO.BackinDataDTO;
import com.czblood.busBloodbank.pojo.VO.BackinQueryVO;
import com.czblood.busBloodbank.service.BackinService;
@ -55,6 +56,13 @@ public class BackinController extends BaseController {
return backinService.deleteData(billNo);
}
@Log(title = BloodSysLogConstants.LOG_TYPE_BLOOD_BACK, businessType = BusinessType.DELETE_DETAIL)
@ApiOperation("删除血液信息")
@PostMapping("/deleteBloodInfo")
public Result deleteBloodInfo(@RequestBody XkBackinDetail xkBackinDetail){
return backinService.deleteBloodInfo(xkBackinDetail);
}
@ApiOperation("查询列表")
@GetMapping("/queryList")
public TableDataInfo queryList(BackinQueryVO backinQueryVO){

View File

@ -1,19 +1,23 @@
package com.czblood.busBloodbank.controller;
import com.czblood.bus.constants.BloodSysLogConstants;
import com.czblood.busBloodbank.pojo.VO.DiscardQueryVO;
import com.czblood.busBloodbank.pojo.VO.DiscardVO;
import com.czblood.busBloodbank.service.DiscardMainService;
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/discardMain")
public class DiscardMainController {
public class DiscardMainController extends BaseController {
@Resource
private DiscardMainService discardMainService;
@ -24,4 +28,39 @@ public class DiscardMainController {
return discardMainService.queryBloodInfo(bloodNo,productNo);
}
@Log(title = BloodSysLogConstants.LOG_TYPE_DISCARD_MAIN, businessType = BusinessType.INSERT)
@ApiOperation("保存报废信息")
@PostMapping("/saveData")
public Result saveData(@RequestBody DiscardVO discardVO){
discardVO.setUserId(getUsername());
return discardMainService.saveData(discardVO);
}
@Log(title = BloodSysLogConstants.LOG_TYPE_DISCARD_MAIN, businessType = BusinessType.CHECK)
@ApiOperation("审核单据")
@GetMapping("/auditData")
public Result auditData(String billNo){
String userId = getUsername();
return discardMainService.auditData(billNo,userId);
}
@Log(title = BloodSysLogConstants.LOG_TYPE_DISCARD_MAIN, businessType = BusinessType.DELETE)
@ApiOperation("删除报废单")
@GetMapping("/deleteData")
public Result deleteData(String billNo){
return discardMainService.deleteData(billNo);
}
@ApiOperation("查询报废单列表")
@PostMapping("/queryList")
public Result queryList(@RequestBody DiscardQueryVO discardQueryVO){
return discardMainService.queryList(discardQueryVO);
}
@ApiOperation("查询报废单详情")
@GetMapping("/queryInfoOne")
public Result queryInfoOne(String billNo){
return discardMainService.queryInfoOne(billNo);
}
}

View File

@ -0,0 +1,11 @@
package com.czblood.busBloodbank.mapper;
import com.czblood.busBloodbank.pojo.VO.DiscardQueryVO;
import java.util.List;
import java.util.Map;
public interface DiscardMapper {
List<Map<String,Object>> queryList(DiscardQueryVO discardQueryVO);
List<Map<String,Object>> queryDetailList(String billNo);
}

View File

@ -1,6 +1,7 @@
package com.czblood.busBloodbank.pojo.DTO;
import com.czblood.bus.pojo.XkBackinDetail;
import com.czblood.bus.pojo.XkBloodInfo;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
@ -14,6 +15,7 @@ import java.util.Map;
public class BackinBloodDTO {
private XkBackinDetail xkBackinDetail;
private Map<String,Object> patientInfo;
private XkBloodInfo xkBloodInfo;
@ApiModelProperty("标志位,1:新增,2:删除")
private String flag;
}

View File

@ -0,0 +1,15 @@
package com.czblood.busBloodbank.pojo.DTO;
import com.czblood.bus.pojo.XkBloodInfo;
import com.czblood.bus.pojo.xtwh.XkBloodBreed;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class BloodMatchDTO {
private XkBloodInfo xkBloodInfo;
private XkBloodBreed xkBloodBreed;
}

View File

@ -0,0 +1,15 @@
package com.czblood.busBloodbank.pojo.VO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DiscardQueryVO {
private String stime;
private String etime;
private String billNo;
}

View File

@ -0,0 +1,18 @@
package com.czblood.busBloodbank.pojo.VO;
import com.czblood.bus.pojo.XkDiscardDetail;
import com.czblood.bus.pojo.XkDiscardMain;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class DiscardVO {
private XkDiscardMain xkDiscardMain;
private List<XkDiscardDetail> xkDiscardDetailList;
private String userId;
}

View File

@ -1,5 +1,6 @@
package com.czblood.busBloodbank.service;
import com.czblood.bus.pojo.XkBackinDetail;
import com.czblood.busBloodbank.pojo.DTO.BackinDataDTO;
import com.czblood.busBloodbank.pojo.VO.BackinQueryVO;
import com.czblood.common.core.domain.Result;
@ -15,4 +16,5 @@ public interface BackinService {
List<Map<String,Object>> queryList(BackinQueryVO backinQueryVO);
Result queryInfo(String billNo);
Result print(String billNo,String templateName,String userId);
Result deleteBloodInfo(XkBackinDetail xkBackinDetail);
}

View File

@ -1,7 +1,14 @@
package com.czblood.busBloodbank.service;
import com.czblood.busBloodbank.pojo.VO.DiscardQueryVO;
import com.czblood.busBloodbank.pojo.VO.DiscardVO;
import com.czblood.common.core.domain.Result;
public interface DiscardMainService {
Result queryBloodInfo(String bloodNo, String productNo);
Result saveData(DiscardVO discardVO);
Result auditData(String billNo,String userId);
Result deleteData(String billNo);
Result queryList(DiscardQueryVO discardQueryVO);
Result queryInfoOne(String billNo);
}

View File

@ -17,6 +17,7 @@ import com.czblood.busBloodbank.pojo.VO.BackinQueryVO;
import com.czblood.busBloodbank.service.BackinService;
import com.czblood.common.core.domain.Result;
import com.czblood.common.utils.spring.SpringUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@ -25,6 +26,7 @@ import java.math.BigDecimal;
import java.util.*;
@Service
@Slf4j
public class BackinServiceImpl implements BackinService {
@Resource
@ -136,6 +138,17 @@ public class BackinServiceImpl implements BackinService {
}else{
//修改
BigDecimal totalMoney = BigDecimal.ZERO;
newBillNo = xkBackinMain.getBill_no();
for (BackinBloodDTO backinBloodDTO : xkBackinDetailList) {
XkBackinDetail xkBackinDetail = backinBloodDTO.getXkBackinDetail();
List<XkInstorageDetail> xkInstorageDetailList = xkInstorageDetailMapper.queryByBloodNo(xkBackinDetail.getBlood_no(), xkBackinDetail.getProduct_no());
if (!xkInstorageDetailList.isEmpty()) {
totalMoney = totalMoney.add(xkInstorageDetailList.get(0).getPrice());
xkBackinDetail.setPrice(xkInstorageDetailList.get(0).getPrice());
}
}
xkBackinMain.setTotal_money(totalMoney); //总金额
Result result = SpringUtils.getBean(BackinServiceImpl.class).updateChargeData(xkBackinMain, xkBackinDetailList, backinDataDTO);
if(!result.getCode().equals("0")) return result;
}
@ -230,6 +243,7 @@ public class BackinServiceImpl implements BackinService {
BackinBloodDTO backinBloodDTO = new BackinBloodDTO();
backinBloodDTO.setPatientInfo(patientInfoList.get(0));
backinBloodDTO.setXkBackinDetail(xkBackinDetail);
backinBloodDTO.setXkBloodInfo(bloodBankUtil.queryBloodInfoOne(bloodNo, productNo));
backinBloodDTOList.add(backinBloodDTO);
}
backinDataDTO.setXkBackinDetailList(backinBloodDTOList);
@ -243,7 +257,20 @@ public class BackinServiceImpl implements BackinService {
reportParam.setUserName(userName);
Result result2 = reportUtil.printToPdf(BloodPrintTypeConstants.BLOOD_OUT_BACK, reportParam, true);
if(!result2.getCode().equals("0")) return new Result("-1",result2.getMsg());
return new Result("0","打印成功!");
return new Result("0","打印成功!",result2.getData());
}
@Override
public Result deleteBloodInfo(XkBackinDetail xkBackinDetail) {
String billNo = BloodBankUtil.isBank(xkBackinDetail.getBill_no());
if(billNo.equals("")) return new Result("0","删除成功!"); //新增的数据就做数据库处理了
String bloodNo = xkBackinDetail.getBlood_no();
String productNo = xkBackinDetail.getProduct_no();
String chargeBillNo = xkBackinDetail.getCharge_billno();
xkBackinDetailMapper.deleteOne(billNo,bloodNo,productNo);
xkChargeMainMapper.deleteByBillNo(chargeBillNo);
xkChargeDetailMapper.deleteByBillNo(chargeBillNo);
return new Result("0","删除成功!");
}
@Transactional(rollbackFor = Exception.class)
@ -279,7 +306,7 @@ public class BackinServiceImpl implements BackinService {
xkBackinMainMapper.update(xkBackinMain);
for (BackinBloodDTO backinBloodDTO : xkBackinDetailList) {
XkBackinDetail xkBackinDetail = backinBloodDTO.getXkBackinDetail();
String flag = backinBloodDTO.getFlag();
String flag = BloodBankUtil.isBank(backinBloodDTO.getFlag());
if(flag.equals("1")){
//新增
Result result = insertChargeInfo(backinBloodDTO,backinDataDTO.getUserId());
@ -294,19 +321,26 @@ public class BackinServiceImpl implements BackinService {
if(xkChargeMain != null) xkChargeMainMapper.insert(xkChargeMain);
if(xkChargeDetail != null) xkChargeDetailMapper.insert(xkChargeDetail);
//回写单号
xkBackinDetail.setCharge_billno(xkChargeMain.getBill_no());
if(xkChargeMain != null) xkBackinDetail.setCharge_billno(xkChargeMain.getBill_no());
xkBackinDetailMapper.insert(xkBackinDetail);
}else if(flag.equals("2")){
//删除
xkBackinDetailMapper.deleteOne(xkBackinDetail.getBill_no(),xkBackinDetail.getBlood_no(),xkBackinDetail.getProduct_no());
xkChargeMainMapper.deleteByBillNo(xkBackinDetail.getCharge_billno());
xkChargeDetailMapper.deleteByBillNo(xkBackinDetail.getCharge_billno());
}
}
return new Result("0","更新成功!");
}
@Transactional(rollbackFor = Exception.class)
// public void deleteBloodInfo(XkBackinDetail xkBackinDetail){
// String billNo = BloodBankUtil.isBank(xkBackinDetail.getBill_no());
// if(billNo.equals("")) return; //新增的数据就做数据库处理了
// String bloodNo = xkBackinDetail.getBlood_no();
// String productNo = xkBackinDetail.getProduct_no();
// String chargeBillNo = xkBackinDetail.getCharge_billno();
// xkBackinDetailMapper.deleteOne(billNo,bloodNo,productNo);
// xkChargeMainMapper.deleteByBillNo(chargeBillNo);
// xkChargeDetailMapper.deleteByBillNo(chargeBillNo);
// }
/**
* 组装退费信息数据
* @param backinBloodDTO

View File

@ -1,13 +1,194 @@
package com.czblood.busBloodbank.service.impl;
import com.czblood.bus.mapper.XkBloodInfoMapper;
import com.czblood.bus.mapper.XkDiscardDetailMapper;
import com.czblood.bus.mapper.XkDiscardMainMapper;
import com.czblood.bus.mapper.XkInstorageDetailMapper;
import com.czblood.bus.pojo.XkBloodInfo;
import com.czblood.bus.pojo.XkDiscardDetail;
import com.czblood.bus.pojo.XkDiscardMain;
import com.czblood.bus.pojo.XkInstorageDetail;
import com.czblood.bus.utils.BloodBankUtil;
import com.czblood.busBloodbank.mapper.DiscardMapper;
import com.czblood.busBloodbank.pojo.VO.DiscardQueryVO;
import com.czblood.busBloodbank.pojo.VO.DiscardVO;
import com.czblood.busBloodbank.service.DiscardMainService;
import com.czblood.common.core.domain.Result;
import com.czblood.common.utils.spring.SpringUtils;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import javax.swing.*;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class DiscardMainServiceImpl implements DiscardMainService {
@Resource
BloodBankUtil bloodBankUtil;
@Resource
XkDiscardDetailMapper xkDiscardDetailMapper;
@Resource
XkInstorageDetailMapper xkInstorageDetailMapper;
@Resource
XkDiscardMainMapper xkDiscardMainMapper;
@Resource
XkBloodInfoMapper xkBloodInfoMapper;
@Resource
DiscardMapper discardMapper;
@Override
public Result queryBloodInfo(String bloodNo, String productNo) {
return null;
XkBloodInfo xkBloodInfo = bloodBankUtil.queryBloodInfoOne(bloodNo, productNo);
if(xkBloodInfo == null) return new Result("-1","血液信息不存在!!!");
XkDiscardDetail xkDiscardDetail = xkDiscardDetailMapper.queryDiscardDetail(bloodNo, productNo);
if(xkDiscardDetail != null) return new Result("-1","血液流水号:"+bloodNo+",产品号:"+productNo+"的报废信息已经存在!!!");
String bloodStatus = xkBloodInfo.getBlood_status();
switch (bloodStatus){
case "2":
return new Result("-1","该血液已经报废!!!");
case "4":
return new Result("-1","该血液已经出库!!!");
}
return new Result("0","查询成功",xkBloodInfo);
}
@Override
public Result saveData(DiscardVO discardVO) {
XkDiscardMain xkDiscardMain = discardVO.getXkDiscardMain();
List<XkDiscardDetail> xkDiscardDetailList = discardVO.getXkDiscardDetailList();
String billNo = BloodBankUtil.isBank(xkDiscardMain.getBill_no());
String auditPerson = BloodBankUtil.isBank(xkDiscardMain.getAudit_person());
if(!auditPerson.equals("")) return new Result("-1","单据已经审核,不允许修改!!");
String newBillNo = "";
BigDecimal price = BigDecimal.ZERO;
BigDecimal totalMoney = BigDecimal.ZERO;
for (XkDiscardDetail xkDiscardDetail : xkDiscardDetailList) {
List<XkInstorageDetail> xkInstorageDetailList = xkInstorageDetailMapper.queryByBloodNo(xkDiscardDetail.getBlood_no(), xkDiscardDetail.getProduct_no());
if(!xkInstorageDetailList.isEmpty()){
BigDecimal price1 = xkInstorageDetailList.get(0).getPrice();
if(price1 == null) price1 = BigDecimal.ZERO;
xkDiscardDetail.setPrice(price1);
totalMoney = totalMoney.add(price1);
}else{
xkDiscardDetail.setPrice(price);
}
}
xkDiscardMain.setTotal_money(totalMoney);
if(billNo.equals("")){
newBillNo = bloodBankUtil.produceBillNo("BFD");
//新增
for (XkDiscardDetail xkDiscardDetail : xkDiscardDetailList) {
xkDiscardDetail.setBill_no(newBillNo);
}
xkDiscardMain.setBill_no(newBillNo);
xkDiscardMain.setInput_person(discardVO.getUserId());
xkDiscardMain.setInput_date(bloodBankUtil.getCurrentTimeDate());
SpringUtils.getBean(DiscardMainServiceImpl.class).insertData(xkDiscardMain,xkDiscardDetailList);
}else{
//更新
newBillNo = xkDiscardMain.getBill_no();
SpringUtils.getBean(DiscardMainServiceImpl.class).updateData(xkDiscardMain,xkDiscardDetailList);
}
return new Result("0","保存成功",newBillNo);
}
@Override
public Result auditData(String billNo,String userId) {
XkDiscardMain xkDiscardMain = xkDiscardMainMapper.queryOne(billNo);
if(xkDiscardMain == null) return new Result("-1","单据不存在!!!");
String auditPerson = BloodBankUtil.isBank(xkDiscardMain.getAudit_person());
if(!auditPerson.equals("")) return new Result("-1","单据已经审核,不允许重复审核!!");
List<XkDiscardDetail> xkDiscardDetailList = xkDiscardDetailMapper.queryListByBillNo(billNo);
List<XkBloodInfo> xkBloodInfoList = new ArrayList<>();
for (XkDiscardDetail xkDiscardDetail : xkDiscardDetailList) {
String bloodNo = xkDiscardDetail.getBlood_no();
String productNo = xkDiscardDetail.getProduct_no();
XkBloodInfo xkBloodInfo = bloodBankUtil.queryBloodInfoOne(bloodNo, productNo);
if(xkBloodInfo == null) return new Result("-1","血液信息不存在!!!");
String bloodStatus = xkBloodInfo.getBlood_status();
switch (bloodStatus){
case "2":
return new Result("-1","该血液"+bloodNo+",产品号:"+productNo+"已经报废!!!");
case "4":
return new Result("-1","该血液"+bloodNo+",产品号:"+productNo+"已经出库!!!");
}
XkBloodInfo xkBloodInfoTemp = new XkBloodInfo();
xkBloodInfoTemp.setBlood_status("2");
xkBloodInfoTemp.setBlood_no(bloodNo);
xkBloodInfoTemp.setProduct_no(productNo);
xkBloodInfoList.add(xkBloodInfoTemp);
}
XkDiscardMain xkDiscardMainTemp = new XkDiscardMain();
xkDiscardMainTemp.setAudit_person(userId);
xkDiscardMainTemp.setAudit_date(bloodBankUtil.getCurrentTimeDate());
xkDiscardMainTemp.setBill_no(billNo);
SpringUtils.getBean(DiscardMainServiceImpl.class).updateAuditData(xkBloodInfoList,xkDiscardMainTemp);
return new Result("0","审核成功");
}
@Override
public Result deleteData(String billNo) {
XkDiscardMain xkDiscardMain = xkDiscardMainMapper.queryOne(billNo);
if(xkDiscardMain == null) return new Result("-1","单据不存在!!!");
String auditPerson = BloodBankUtil.isBank(xkDiscardMain.getAudit_person());
if(!auditPerson.equals("")) return new Result("-1","单据已经审核,不允许删除!!");
SpringUtils.getBean(DiscardMainServiceImpl.class).deleteDataTrans(billNo);
return new Result("0","删除成功");
}
@Override
public Result queryList(DiscardQueryVO discardQueryVO) {
List<Map<String,Object>> list = discardMapper.queryList(discardQueryVO);
return new Result("0","查询成功",list);
}
@Override
public Result queryInfoOne(String billNo) {
XkDiscardMain xkDiscardMain = xkDiscardMainMapper.queryOne(billNo);
List<Map<String, Object>> xkDiscardDetailList = discardMapper.queryDetailList(billNo);
Map<String,Object> map = new HashMap<>();
map.put("xkDiscardMain",xkDiscardMain);
map.put("xkDiscardDetailList",xkDiscardDetailList);
return new Result("0","查询成功",map);
}
@Transactional(rollbackFor = Exception.class)
public void insertData(XkDiscardMain xkDiscardMain,List<XkDiscardDetail> xkDiscardDetailList){
xkDiscardMainMapper.insert(xkDiscardMain);
for (XkDiscardDetail xkDiscardDetail : xkDiscardDetailList) {
xkDiscardDetailMapper.insert(xkDiscardDetail);
}
}
@Transactional(rollbackFor = Exception.class)
public void updateData(XkDiscardMain xkDiscardMain,List<XkDiscardDetail> xkDiscardDetailList){
xkDiscardMainMapper.update(xkDiscardMain);
xkDiscardDetailMapper.delete(xkDiscardMain.getBill_no());
for (XkDiscardDetail xkDiscardDetail : xkDiscardDetailList) {
xkDiscardDetailMapper.insert(xkDiscardDetail);
}
}
@Transactional(rollbackFor = Exception.class)
public void updateAuditData(List<XkBloodInfo> xkBloodInfoList,XkDiscardMain xkDiscardMain){
for (XkBloodInfo xkBloodInfo : xkBloodInfoList) {
xkBloodInfoMapper.update(xkBloodInfo);
}
xkDiscardMainMapper.update(xkDiscardMain);
}
@Transactional(rollbackFor = Exception.class)
public void deleteDataTrans(String billNo){
xkDiscardMainMapper.deleteByBillNo(billNo);
xkDiscardDetailMapper.delete(billNo);
}
}

View File

@ -9,6 +9,7 @@ import com.czblood.bus.pojo.inter.MatchBloodTypeRequest;
import com.czblood.bus.utils.BloodBankUtil;
import com.czblood.bus.utils.BloodInterfaceUtil;
import com.czblood.busBloodbank.mapper.MatchBloodMapper;
import com.czblood.busBloodbank.pojo.DTO.BloodMatchDTO;
import com.czblood.busBloodbank.pojo.DTO.MatchBloodDTO;
import com.czblood.busBloodbank.pojo.VO.MatchBloodListQueryVO;
import com.czblood.busBloodbank.pojo.VO.MatchBloodStockQueryVO;
@ -43,6 +44,8 @@ public class MatchBloodServiceImpl implements MatchBloodService {
XkMatchMainMapper xkMatchMainMapper;
@Resource
XkTransfuseApplyTestitemMapper xkTransfuseApplyTestitemMapper;
@Resource
XkBloodBreedMapper xkBloodBreedMapper;
@Override
public Result queryWaitInfo() {
@ -115,8 +118,10 @@ public class MatchBloodServiceImpl implements MatchBloodService {
return new Result("-1","该血液已经出库!");
}
return new Result("0","获取数据成功!",xkBloodInfo);
BloodMatchDTO bloodMatchDTO = new BloodMatchDTO();
bloodMatchDTO.setXkBloodInfo(xkBloodInfo);
bloodMatchDTO.setXkBloodBreed(xkBloodBreedMapper.queryOne(xkBloodInfo.getBlood_breed()));
return new Result("0","获取数据成功!",bloodMatchDTO);
}
@Override
@ -217,6 +222,7 @@ public class MatchBloodServiceImpl implements MatchBloodService {
if(xkMatchMain == null) return new Result("-1","该配血单不存在!");
String billStatus = BloodBankUtil.isBank(xkMatchMain.getBill_status());
if(billStatus.equals("B")) return new Result("-1","该配血单已发血,不可作废!");
if(billStatus.equals("ZF")) return new Result("-1","该配血单已作废,不可作废!");
String chargeMainBillNo = BloodBankUtil.isBank(matchBloodMapper.queryChargeMainBillNo(billNo));
String checkNo = BloodBankUtil.isBank(xkMatchMain.getCheck_no());
XkCheckBloodtype xkCheckBloodtypeTemp = null;

View File

@ -106,7 +106,7 @@ public class MatchBloodUtil {
}
public Result checkBloodNeedMatch(String bloodNo,String productNo){
String isMatch = matchBloodMapper.checkBloodNeedMatch(bloodNo, productNo);
String isMatch = BloodBankUtil.isBank(matchBloodMapper.checkBloodNeedMatch(bloodNo, productNo));
if(isMatch.equals("Y")) return new Result("0","校验通过!");
return new Result("-1","该血液流水号:"+bloodNo+"产品码:"+productNo+"该血液流水号对应的血液不需要进行配血操作!");
}

View File

@ -11,7 +11,7 @@
Where xk_out_main.bill_no =xk_out_detail.bill_no and
xk_out_detail.blood_no = #{bloodNo} and
<![CDATA[xk_out_main.check_sign <> 'ZF' and]]>
xk_out_detail.product_no = #{productNo}
xk_out_detail.product_no = #{productNo} and isnull(xk_out_main.check_sign,'') = 'Y'
</select>
<select id="queryPatientInfo" resultType="java.util.Map">
@ -38,13 +38,15 @@
xk_backin_main.handle_person,
xk_backin_main.total_money,
xk_backin_main.back_date ,
xk_backin_main.audit_person,
xk_backin_main.audit_date,
xk_out_main.beinhos_id,
xk_out_main.patient_name
FROM xk_backin_main ,xk_backin_detail ,xk_out_detail,xk_out_main
WHERE (xk_backin_main.back_date between #{stime} AND #{etime})
and (xk_backin_main.org_type = 'A') and xk_backin_main.bill_no = xk_backin_detail.bill_no
and xk_out_detail.blood_no = xk_backin_detail.blood_no and xk_out_detail.product_no = xk_backin_detail.product_no
and xk_out_main.bill_no = xk_out_detail.bill_no and xk_out_detail.exp1='Y'
and xk_out_main.bill_no = xk_out_detail.bill_no
<if test="billNo != null">AND (xk_backin_main.bill_no = #{billNo})</if>
<if test="dept != null">and xk_backin_main.dept_id = #{dept}</if>

View File

@ -0,0 +1,19 @@
<?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.DiscardMapper">
<select id="queryList" resultType="java.util.Map">
SELECT xk_discard_main.bill_no,
xk_discard_main.handle_person,
xk_discard_main.total_money,
xk_discard_main.discard_date
FROM xk_discard_main
WHERE (xk_discard_main.discard_date between #{stime} and #{etime})
<if test="billNo != null and billNo != ''"> AND (xk_discard_main.bill_no = #{billNo})</if>
</select>
<select id="queryDetailList" resultType="java.util.Map">
select a.*,b.blood_breed,b.capacity,b.unit,b.blood_type,b.rh_blood_type,b.valid_date from xk_discard_detail a,xk_blood_info b
where a.bill_no = #{billNo} and a.blood_no = b.blood_no and a.product_no = b.product_no
</select>
</mapper>

View File

@ -171,9 +171,10 @@
space(4) as match_delay,
space(4) as choose
FROM xk_blood_info
left join xk_match_detail on (xk_blood_info.blood_no = xk_match_detail.blood_no and xk_match_detail.product_no = xk_blood_info.product_no)
left join xk_match_detail on (xk_blood_info.blood_no = xk_match_detail.blood_no and xk_match_detail.product_no = xk_blood_info.product_no),xk_match_main
WHERE ( xk_blood_info.blood_status = '1' ) AND
( xk_blood_info.blood_sort In ('C','W') OR ISNULL(xk_blood_info.blood_sort,'') = '')
<![CDATA[and xk_match_main.bill_no = xk_match_detail.bill_no and isnull(xk_match_main.bill_status,'') <> 'ZF']]>
<if test="bloodNo != null and bloodNo!= ''">AND xk_blood_info.blood_no = #{bloodNo}</if>
</select>

View File

@ -117,7 +117,7 @@ public class TransfuseCheckExplainServiceImpl implements TransfuseCheckExplainSe
xkTransfuseApplyTemp.setCheck_date(bloodBankUtil.getCurrentTimeDate());
transfuseCheckExplainUtil.updateApplyStatus(xkTransfuseApplyTemp,xkCheckBloodtype);
//保存条码数据
Result result = transfuseCheckExplainUtil.createSampleData(applyNo);
Result result = transfuseCheckExplainUtil.createSampleData(applyNo,explainVO.getUserId());
if(!result.getCode().equals("0")) return result;
//调用外部接口

View File

@ -86,7 +86,7 @@ public class TransfuseCheckExplainUtil {
* @param billNo
* @return
*/
public Result createSampleData(String billNo){
public Result createSampleData(String billNo,String userId){
String tmsfzsxshsc = bloodBankUtil.getParameterValue("TMSFZSXSHSC");
if(!tmsfzsxshsc.equals("Y")) return new Result("0","未开启条码在审核的时候生成的参数!");
Date currentTimeDate = bloodBankUtil.getCurrentTimeDate();
@ -113,6 +113,8 @@ public class TransfuseCheckExplainUtil {
xkSampleInfo.setExp1("Y");
xkSampleInfo.setSample_status("1");
xkSampleInfo.setCreatetime(currentTimeDate);
xkSampleInfo.setPick_Date(currentTimeDate);
xkSampleInfo.setPick_Nurse(userId);
//修改申请单数据
XkTransfuseApply xkTransfuseApply = new XkTransfuseApply();

View File

@ -0,0 +1,54 @@
package com.czblood.busNurse.controller;
import com.czblood.busNurse.pojo.DTO.RecycleBagDTO;
import com.czblood.busNurse.pojo.VO.RecycleBagSearchVO;
import com.czblood.busNurse.pojo.VO.RecycleBagVO;
import com.czblood.busNurse.service.RecycleBagService;
import com.czblood.common.core.controller.BaseController;
import com.czblood.common.core.domain.Result;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.List;
@Api(tags = "血袋回收")
@RestController
@RequestMapping("/bus/nurse/recycleBag")
@Slf4j
public class RecycleBagController extends BaseController {
@Resource
private RecycleBagService recycleBagService;
@ApiOperation("获取回收血液信息")
@GetMapping("/getBloodInfo")
public Result getBloodInfo(String bloodNo,String productNo) {
return recycleBagService.getBloodInfo(bloodNo,productNo);
}
@ApiOperation("批量查询血液回收单据信息")
@PostMapping("/batchSearch")
public Result batchSearch(@RequestBody RecycleBagSearchVO recycleBagSearchVO){
return recycleBagService.batchSearch(recycleBagSearchVO);
}
@ApiOperation("批量查询血液回收信息列表")
@PostMapping("/queryBatchBloodInfo")
public Result queryBatchBloodInfoList(@RequestBody List<RecycleBagDTO> recycleBagDTOList){
return recycleBagService.queryBatchBloodInfoList(recycleBagDTOList);
}
@ApiOperation("保存血液回收单据信息")
@PostMapping("/saveData")
public Result saveData(@RequestBody RecycleBagVO recycleBagVO){
recycleBagVO.setUserId(getUsername());
return recycleBagService.saveData(recycleBagVO);
}
}

View File

@ -0,0 +1,15 @@
package com.czblood.busNurse.mapper;
import com.czblood.busNurse.pojo.DTO.RecycleBagDTO;
import com.czblood.busNurse.pojo.VO.RecycleBagSearchVO;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;
public interface RecycleBagMapper {
List<Map<String,Object>> getBloodInfo(@Param("bloodNo") String bloodNo,@Param("productNo") String productNo);
List<RecycleBagDTO> queryBatchData(RecycleBagSearchVO recycleBagSearchVO);
List<Map<String,Object>> queryBillNoBloodInfo(String billNo);
int queryRecycleBagCount(String billNo);
}

View File

@ -10,4 +10,5 @@ public interface SampleInfoMapper {
List<Map<String,Object>> queryList(SampleInfoVO sampleInfoVO);
List<Map<String,Object>> querySampleInfoData(String dept);
XkCheckBloodtype queryMaxTestDateInfo(String beinhos_id);
List<Map<String,Object>> queryListCheck(SampleInfoVO sampleInfoVO);
}

View File

@ -0,0 +1,18 @@
package com.czblood.busNurse.pojo.DTO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RecycleBagDTO {
private String bill_no;
private Date occur_date;
private String patient_name;
private String beinhos_id;
private String dept_id;
}

View File

@ -0,0 +1,14 @@
package com.czblood.busNurse.pojo.VO;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RecycleBagSearchVO {
private String stime;
private String etime;
private String dept;
}

View File

@ -0,0 +1,23 @@
package com.czblood.busNurse.pojo.VO;
import com.czblood.bus.pojo.XkRecycleBagDetail;
import com.czblood.bus.pojo.XkRecycleBagMain;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@AllArgsConstructor
@NoArgsConstructor
public class RecycleBagVO {
@ApiModelProperty("血袋回收主表")
private XkRecycleBagMain xkRecycleBagMain;
@ApiModelProperty("血袋回收明细表")
private List<XkRecycleBagDetail> xkRecycleBagDetailList;
private String userId;
@ApiModelProperty("选中的发血单号列表")
private List<String> billNoList;
}

View File

@ -0,0 +1,15 @@
package com.czblood.busNurse.service;
import com.czblood.busNurse.pojo.DTO.RecycleBagDTO;
import com.czblood.busNurse.pojo.VO.RecycleBagSearchVO;
import com.czblood.busNurse.pojo.VO.RecycleBagVO;
import com.czblood.common.core.domain.Result;
import java.util.List;
public interface RecycleBagService {
Result getBloodInfo(String bloodNo, String productNo);
Result batchSearch(RecycleBagSearchVO recycleBagSearchVO);
Result queryBatchBloodInfoList(List<RecycleBagDTO> recycleBagDTOList);
Result saveData(RecycleBagVO recycleBagVO);
}

View File

@ -0,0 +1,146 @@
package com.czblood.busNurse.service.impl;
import com.czblood.bus.mapper.XkBloodInfoMapper;
import com.czblood.bus.mapper.XkOutMainMapper;
import com.czblood.bus.mapper.XkRecycleBagDetailMapper;
import com.czblood.bus.mapper.XkRecycleBagMainMapper;
import com.czblood.bus.pojo.XkBloodInfo;
import com.czblood.bus.pojo.XkOutMain;
import com.czblood.bus.pojo.XkRecycleBagDetail;
import com.czblood.bus.pojo.XkRecycleBagMain;
import com.czblood.bus.utils.BloodBankUtil;
import com.czblood.busNurse.mapper.RecycleBagMapper;
import com.czblood.busNurse.pojo.DTO.RecycleBagDTO;
import com.czblood.busNurse.pojo.VO.RecycleBagSearchVO;
import com.czblood.busNurse.pojo.VO.RecycleBagVO;
import com.czblood.busNurse.service.RecycleBagService;
import com.czblood.common.core.domain.Result;
import com.czblood.common.utils.spring.SpringUtils;
import io.swagger.v3.oas.annotations.parameters.RequestBody;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.*;
@Service
public class RecycleBagServiceImpl implements RecycleBagService {
@Resource
BloodBankUtil bloodBankUtil;
@Resource
RecycleBagMapper recycleBagMapper;
@Resource
XkBloodInfoMapper xkBloodInfoMapper;
@Resource
XkRecycleBagMainMapper xkRecycleBagMainMapper;
@Resource
XkRecycleBagDetailMapper xkRecycleBagDetailMapper;
@Resource
XkOutMainMapper xkOutMainMapper;
@Override
public Result getBloodInfo(String bloodNo, String productNo) {
XkBloodInfo xkBloodInfo = bloodBankUtil.queryBloodInfoOne(bloodNo, productNo);
if(xkBloodInfo == null) return new Result("-1","血液信息不存在");
String bloodStatus = BloodBankUtil.isBank(xkBloodInfo.getBlood_status());
if(!bloodStatus.equals("4")) return new Result("-1","该血液尚未出库!");
String recycleSign = BloodBankUtil.isBank(xkBloodInfo.getRecycle_sign());
if(recycleSign.equals("Y")) return new Result("-1","该血袋已经登记回收信息!");
List<Map<String, Object>> bloodInfoList = recycleBagMapper.getBloodInfo(bloodNo, productNo);
if(bloodInfoList.isEmpty()) return new Result("-1","未查询到该血液信息!");
return new Result("0","操作成功",bloodInfoList.get(0));
}
@Override
public Result batchSearch(RecycleBagSearchVO recycleBagSearchVO) {
List<RecycleBagDTO> recycleBagDTOList = recycleBagMapper.queryBatchData(recycleBagSearchVO);
return new Result("0","操作成功",recycleBagDTOList);
}
@Override
public Result queryBatchBloodInfoList(List<RecycleBagDTO> recycleBagDTOList) {
List<Map<String, Object>> resultList = new ArrayList<>();
Set<String> existKeySet = new HashSet<>();
for (RecycleBagDTO recycleBagDTO : recycleBagDTOList) {
List<Map<String, Object>> bloodInfoList = recycleBagMapper.queryBillNoBloodInfo(recycleBagDTO.getBill_no());
if (bloodInfoList == null || bloodInfoList.isEmpty()) {
continue;
}
for (Map<String, Object> info : bloodInfoList) {
Object bloodNo = info.get("blood_no");
Object productNo = info.get("product_no");
String key = bloodNo + "_" + productNo;
if (existKeySet.add(key)) {
resultList.add(info);
}
}
}
return new Result("0", "操作成功", resultList);
}
@Override
public Result saveData(RecycleBagVO recycleBagVO) {
XkRecycleBagMain xkRecycleBagMain = recycleBagVO.getXkRecycleBagMain();
List<XkRecycleBagDetail> xkRecycleBagDetailList = recycleBagVO.getXkRecycleBagDetailList();
List<String> billNoList = recycleBagVO.getBillNoList();
for (XkRecycleBagDetail xkRecycleBagDetail : xkRecycleBagDetailList) {
String bloodNo = xkRecycleBagDetail.getBlood_no();
String productNo = xkRecycleBagDetail.getProduct_no();
XkBloodInfo xkBloodInfo = bloodBankUtil.queryBloodInfoOne(bloodNo, productNo);
if(xkBloodInfo == null) return new Result("-1","血液信息"+bloodNo+"_"+productNo+"不存在");
String bloodStatus = xkBloodInfo.getBlood_status();
if(!bloodStatus.equals("4")) return new Result("-1","该血液"+bloodNo+"_"+productNo+"尚未出库!");
String recycleSign = BloodBankUtil.isBank(xkBloodInfo.getRecycle_sign());
if(recycleSign.equals("Y")) return new Result("-1","该血袋"+bloodNo+"_"+productNo+"已经回收,请重新检索数据!");
}
Date currentTimeDate = bloodBankUtil.getCurrentTimeDate();
String newBillNo = bloodBankUtil.produceBillNo("XDHS");
xkRecycleBagMain.setBill_no(newBillNo);
xkRecycleBagMain.setReceive_person(recycleBagVO.getUserId());
xkRecycleBagMain.setReceive_date(currentTimeDate);
xkRecycleBagMain.setSend_date(currentTimeDate);
String sendPerson = xkRecycleBagMain.getSend_person();
List<XkBloodInfo> xkBloodInfoList = new ArrayList<>();
if(sendPerson == null || sendPerson.equals("")){
xkRecycleBagMain.setSend_person(recycleBagVO.getUserId());
}
for (XkRecycleBagDetail xkRecycleBagDetail : xkRecycleBagDetailList) {
String bloodNo = xkRecycleBagDetail.getBlood_no();
String productNo = xkRecycleBagDetail.getProduct_no();
xkRecycleBagDetail.setBill_no(newBillNo);
XkBloodInfo xkBloodInfoTemp = new XkBloodInfo();
xkBloodInfoTemp.setRecycle_sign("Y");
xkBloodInfoTemp.setBlood_no(bloodNo);
xkBloodInfoTemp.setProduct_no(productNo);
xkBloodInfoList.add(xkBloodInfoTemp);
}
SpringUtils.getBean(RecycleBagServiceImpl.class).saveBatchData(xkBloodInfoList,xkRecycleBagMain,xkRecycleBagDetailList);
//判断出库表里面的血液是否都已经回收,如果都回收了 ,就把出库单主表都回收的标志打上
for (String billOutNo : billNoList) {
int recycleBagCount = recycleBagMapper.queryRecycleBagCount(billOutNo);
if(recycleBagCount == 0){
XkOutMain xkOutMainTemp = new XkOutMain();
xkOutMainTemp.setBill_no(billOutNo);
xkOutMainTemp.setAll_recycle_sign("Y");
xkOutMainMapper.update(xkOutMainTemp);
}
}
return new Result("0","保存成功",newBillNo);
}
@Transactional(rollbackFor = Exception.class)
public void saveBatchData(List<XkBloodInfo> xkBloodInfoList,XkRecycleBagMain xkRecycleBagMain,List<XkRecycleBagDetail> xkRecycleBagDetailList) {
for (XkBloodInfo xkBloodInfo : xkBloodInfoList) {
xkBloodInfoMapper.update(xkBloodInfo);
}
xkRecycleBagMainMapper.insert(xkRecycleBagMain);
for (XkRecycleBagDetail xkRecycleBagDetail : xkRecycleBagDetailList) {
xkRecycleBagDetailMapper.insert(xkRecycleBagDetail);
}
}
}

View File

@ -45,7 +45,14 @@ public class SampleInfoServiceImpl implements SampleInfoService {
Result result = createSampleInfo(sampleInfoVO.getDept(), sampleInfoVO.getUserId());
String msg = "";
if(!result.getCode().equals("0")) msg = result.getMsg();
List<Map<String, Object>> mapList = sampleInfoMapper.queryList(sampleInfoVO);
String tmsfzsxshsc = bloodBankUtil.getParameterValue("TMSFZSXSHSC");
List<Map<String, Object>> mapList = null;
if(tmsfzsxshsc.equals("Y")){
mapList = sampleInfoMapper.queryListCheck(sampleInfoVO);
}else{
mapList = sampleInfoMapper.queryList(sampleInfoVO);
}
if(!msg.equals("")){
return new Result("1", msg, mapList);
}else{
@ -133,6 +140,7 @@ public class SampleInfoServiceImpl implements SampleInfoService {
xkSampleInfo.setBirthday(DateUtil.parse(BloodBankUtil.isBank(stringObjectMap.get("patient_birthday")),"yyyy-MM-dd HH:mm:ss"));
xkSampleInfo.setRelate_ApplyNo(BloodBankUtil.isBank(stringObjectMap.get("bill_no")));
xkSampleInfo.setExp1("Y");
xkSampleInfo.setCreatetime(currentTimeDate);
xkTransfuseApply = new XkTransfuseApply();
xkTransfuseApply.setBill_no(BloodBankUtil.isBank(stringObjectMap.get("bill_no")));

View File

@ -0,0 +1,49 @@
<?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.busNurse.mapper.RecycleBagMapper">
<select id="getBloodInfo" resultType="java.util.Map">
Select xk_out_main.patient_name , xk_out_main.dept_id , xk_blood_info.blood_breed , xk_blood_info.blood_type ,
xk_blood_info.capacity , xk_blood_info.unit , xk_out_main.bill_no,xk_out_main.beinhos_id,xk_patient_info.patient_sex
From xk_out_main left join xk_patient_info on (xk_out_main.beinhos_id = xk_patient_info.beinhos_id), xk_out_detail , xk_blood_info
Where ( xk_out_main.bill_no =xk_out_detail.bill_no ) and
( xk_out_detail.blood_no =xk_blood_info.blood_no ) and
( xk_blood_info.blood_no = #{bloodNo} ) AND (xk_blood_info.product_no = #{productNo})
</select>
<select id="queryBatchData" resultType="com.czblood.busNurse.pojo.DTO.RecycleBagDTO">
SELECT xk_out_main.bill_no, xk_out_main.occur_date, xk_out_main.patient_name, xk_out_main.beinhos_id, xk_out_main.dept_id
FROM xk_out_main WHERE ( isnull(all_recycle_sign,'N') = 'N' )
and ( xk_out_main.occur_date between #{stime} and #{etime} )
and isnull(xk_out_main.check_sign,'N') = 'Y'
<if test="dept != null and dept != ''">and xk_out_main.dept_id = #{dept}</if>
</select>
<select id="queryBillNoBloodInfo" resultType="java.util.Map">
SELECT xk_blood_info.blood_no,
xk_blood_info.blood_breed,
xk_blood_info.blood_type,
xk_blood_info.capacity,
xk_blood_info.unit,
xk_blood_info.product_no,
xk_out_main.patient_name,
xk_out_main.dept_id,
xk_out_main.bill_no
FROM xk_blood_info,
xk_out_detail,
xk_out_main
WHERE ( xk_blood_info.blood_no = xk_out_detail.blood_no ) and
( xk_blood_info.product_no = xk_out_detail.product_no ) and
( xk_out_detail.bill_no = xk_out_main.bill_no ) and
( ( xk_out_main.bill_no = #{billNo} ) )
and isnull(xk_blood_info.recycle_sign,'N') = 'N'
</select>
<select id="queryRecycleBagCount" resultType="java.lang.Integer">
SELECT Count ( *)
FROM xk_out_main , xk_out_detail , xk_blood_info
WHERE ( xk_out_main.bill_no =xk_out_detail.bill_no ) AND
( xk_out_detail.blood_no =xk_blood_info.blood_no ) AND
( xk_out_detail.product_no =xk_blood_info.product_no ) AND
( isnull ( xk_blood_info.recycle_sign , 'N' ) ='N' ) AND
( xk_out_main.bill_no = #{billNo} )
</select>
</mapper>

View File

@ -101,4 +101,38 @@
<select id="queryMaxTestDateInfo" resultType="com.czblood.bus.pojo.XkCheckBloodtype">
SELECT top 1 * FROM xk_check_bloodtype Where Beinhos_id = #{beinhos_id} Order By test_date Desc
</select>
<select id="queryListCheck" resultType="java.util.Map">
SELECT xk_sample_info.Sample_No,
xk_sample_info.Purpose,
xk_sample_info.Dept,
xk_sample_info.Relate_ApplyNo,
xk_sample_info.Blood_Type,
xk_sample_info.Rh_Blood_Type,
xk_sample_info.Sample_Name,
xk_sample_info.Sex,
xk_sample_info.Age,
xk_sample_info.Birthday,
xk_sample_info.Pick_Nurse,
xk_sample_info.Pick_Date,
xk_sample_info.Send_Nurse,
xk_sample_info.Send_Date,
xk_sample_info.TakeOver_Man,
xk_sample_info.TakeOver_Date,
xk_sample_info.Discard_Person,
xk_sample_info.Discard_Date,
xk_sample_info.Discard_Reason,
xk_sample_info.Exp2,
xk_sample_info.Overdue_Flag ,
xk_sample_info.sendperson,
xk_sample_info.sample_status,
xk_transfuse_apply_bloodbreed.blood_breed,
(select is_match from xk_blood_breed where xk_blood_breed.breed_code = xk_transfuse_apply_bloodbreed.blood_breed ) as is_match
FROM xk_sample_info
LEFT JOIN xk_transfuse_apply ON (xk_sample_info.Relate_ApplyNo = xk_transfuse_apply.bill_no)
LEFT JOIN xk_transfuse_apply_bloodbreed ON (xk_transfuse_apply_bloodbreed.bill_no = xk_transfuse_apply.bill_no)
where (xk_sample_info.createtime Between #{stime} AND #{etime})
<if test="dept != null">AND (xk_sample_info.dept = #{dept})</if>
<if test="sample_no != null">and (xk_sample_info.Sample_No = #{sample_no})</if>
</select>
</mapper>

View File

@ -214,3 +214,17 @@ update xk_charge_item set module_type = '002' where module_code = '0203'
update xk_charge_item set module_type = '004' where module_code = '0204'
update xk_charge_item set module_type = '003' where module_code = '0501'
update xk_charge_item set module_type = '006' where module_code = '0302'
IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_recycle_bag_main' AND type = 'PK' )
BEGIN
ALTER TABLE xk_recycle_bag_main ADD CONSTRAINT PK_xk_recycle_bag_main PRIMARY KEY CLUSTERED (bill_no);
END
GO
ALTER TABLE xk_recycle_bag_detail ALTER COLUMN product_no VARCHAR(18) NOT NULL;
go
IF NOT EXISTS (SELECT 1 FROM sys.key_constraints WHERE name = 'PK_xk_recycle_bag_detail' AND type = 'PK' )
BEGIN
ALTER TABLE xk_recycle_bag_detail ADD CONSTRAINT PK_xk_recycle_bag_detail PRIMARY KEY CLUSTERED (bill_no,blood_no,product_no);
END
GO