@ -29,21 +29,25 @@ public class CasebookService {
return Result . error ( ResultEnum . PAY_MONEY_IS_ZERO ) ;
}
if ( isPay ( patientId , treatNum , applyId , getWay , useToName ) ) {
log . info ( "{} [病历]订单已支付 applyId-{}, patientId={},treatNum-{},getWay-{},useToName-{}" , merchantEnum . NAME , applyId , patientId , treatNum , getWay , useToName ) ;
return Result . error ( ResultEnum . APPLY_REPEAT ) ;
}
PayCasebook order = selectOrderByApplyId ( applyId , treatNum ) ;
String outTradeNo = CodeHelper . getOutTradeNo ( merchantEnum ) ;
log . info ( "{} [病历]查询订单 order=[{}]" , merchantEnum . NAME , JsonHelper . toJsonString ( order ) ) ;
if ( order ! = null ) {
if ( order . hasPayStatusPaid ( ) ) {
log . info ( "{} [病历]订单已支付 applyId={}, outTradeNo={}" , merchantEnum . NAME , applyId , order . getOutTradeNo ( ) ) ;
return Result . error ( ResultEnum . PAY_REPEAT ) ;
}
if ( ObjectUtils . isEmpty ( order . getOutTradeNo ( ) ) ) {
outTradeNo = order . getOutTradeNo ( ) ;
}
}
if ( ! isSaveCasebookInfo ( patientId , treatNum , applyId , new BigDecimal ( totalFee ) , outTradeNo , getWay , useToName ) ) {
if ( ! updatePrepayInfo ( apply Id, treatNum , new BigDecimal ( totalFee ) , outTradeNo ) ) {
log . info ( "{} [病历]下单信息存储失败 applyId-{}, patientId={},treatNum-{}" , merchantEnum . NAME , applyId , patientId , treatNum ) ;
return Result . error ( ResultEnum . SPECIFIED_QUESTIONED_USER_NOT_EXIST ) ;
}
String body = "病历复印缴费 住院号=" + treatNum ;
String body = "病历复印缴费 住院号:" + treatNum ;
JSONObject respJson = PayService . createOrder ( merchantEnum , openid , patientId , totalFee , outTradeNo , PQREnum . CASEBOOK . CODE , ip , body ) ;
if ( respJson = = null ) {
return Result . error ( ResultEnum . PAY_ERROR ) ; // 支付异常
@ -51,91 +55,135 @@ public class CasebookService {
return Result . success ( respJson ) ;
}
/ * *
* [ 病历复印 ] 判断是否存在预约记录
*
* @param patientId 患者id
* @param treatNum 住院号
* @param getWay 方式
* @param useToName 模版名称
* @return bool
* /
public boolean isExit ( String patientId , String treatNum , String getWay , String useToName ) {
if ( patientId = = null | | treatNum = = null ) {
log . info ( "[病历复印]唤起支付 存入 applyId失败,patientId-{},treatNum-{}," , patientId , treatNum ) ;
log . info ( "[病历]唤起支付 存入 applyId失败,patientId-{},treatNum-{}," , patientId , treatNum ) ;
return false ;
}
return new CasebookDao ( ) . selectIsExit ( patientId , treatNum , getWay , useToName ) ;
}
/ * *
* @param patientId 患者id
* @param treatNum 住院号
* @return 是否成功
* 更新预支付订单信息
*
* @param applyId 申请id
* @param treatNum 住院号
* @param totalFee 金额
* @param outTradeNo 订单号
* @return bool
* /
public boolean isSaveCasebookInfo ( String patientId , String treatNum , String applyId , BigDecimal totalFee , String outTradeNo , String getWay , String useToName ) {
if ( patientId = = null | | treatNum = = null ) {
log . info ( "[病历复印]唤起支付 存入 applyId失败,patientId-{},treatNum-{},totalFee-{}" , patientId , treatNum , totalFee ) ;
public boolean updatePrepayInfo ( String applyId , String treatNum , BigDecimal totalFee , String outTradeNo ) {
log . info ( "[病历复印]更新下单信息 applyId={}, treatNum={}, totalFee={}, outTradeNo={}" , applyId , treatNum , totalFee , totalFee ) ;
if ( ObjectUtils . isEmpty ( applyId ) | | totalFee . compareTo ( BigDecimal . ZERO ) = = 0 | | ObjectUtils . isEmpty ( outTradeNo ) ) {
log . error ( "[病历复印]更新下单信息失败 applyId={}, totalFee={}, outTradeNo={}" , applyId , totalFee , totalFee ) ;
return false ;
}
return new CasebookDao ( ) . updatePayStatePre ( patient Id , treatNum , applyId , totalFee , outTradeNo , getWay , useToName ) ;
return new CasebookDao ( ) . updatePrepayInfo ( apply Id , treatNum , totalFee , outTradeNo ) ;
}
public boolean isPay ( String patientId , String treatNum , String applyId , String getWay , String useToName ) {
if ( patientId = = null | | treatNum = = null ) {
log . info ( "[病历复印]查重失败,patientId-{},treatNum-{},applyId-{}" , patientId , treatNum , applyId ) ;
return false ;
/ * *
* 根据预约申请id查询订单信息
*
* @param applyId 申请id
* @param treatNum 住院号
* @return bean
* /
public PayCasebook selectOrderByApplyId ( String applyId , String treatNum ) {
if ( ObjectUtils . isEmpty ( applyId ) | | ObjectUtils . isEmpty ( treatNum ) ) {
return null ;
}
return new CasebookDao ( ) . selectIsPay ( patientId , treatNum , applyId , getWay , useToName ) ;
return new CasebookDao ( ) . selectOrder ( applyId , treatNum ) ;
}
/ * *
* 新增预约记录首次存入
* [ 病历复印 ] 新增预约记录
*
* @param casebook 病历 订单信息
* @return 是否成功
* @param casebook 订单信息
* @return bool
* /
public boolean addApply ( PayCasebook casebook , String openId , String patientId ) {
public long addApply ( PayCasebook casebook , String openId , String patientId ) {
if ( casebook = = null ) {
log . info ( "casebook is null" ) ;
return false ;
return - 1 ;
}
return new CasebookDao ( ) . insert ( casebook , openId , patientId ) ;
}
public void payNotify ( MerchantEnum merchantEnum , String openid , BigDecimal totalFee , String outTradeNo , String bankTransNo , String payInfo ) {
/ * *
* 预约成功后 , 记录申请id
*
* @param id id
* @param applyId 申请id
* @return bool
* /
public boolean updateApplyIdById ( long id , String applyId ) {
return new CasebookDao ( ) . updateApplyIdById ( id , applyId ) ;
}
// 支付回调通知
public void paidNotify ( MerchantEnum merchantEnum , String openid , BigDecimal totalFee , String outTradeNo , String bankTransNo , String payInfo ) {
CasebookDao casebookDao = new CasebookDao ( ) ;
PayCasebook order = casebookDao . selectByOutTradeNo ( outTradeNo ) ;
String casebookId = order . getApplyId ( ) ;
if ( ObjectUtils . isEmpty ( casebookId ) ) {
log . error ( "[病历]病历申请ID缺失 outTradeNo={}, bankTransNo={}, casebookId={}" , outTradeNo , bankTransNo , casebookId ) ;
String apply Id = order . getApplyId ( ) ;
if ( ObjectUtils . isEmpty ( apply Id) ) {
log . error ( "[病历复印 ]回调: 病历申请ID缺失 outTradeNo={}, bankTransNo={}, apply Id={}" , outTradeNo , bankTransNo , apply Id) ;
return ;
}
Integer payStates = order . getPayStatus ( ) ;
if ( payStates = = 0 ) {
log . error ( "[病历]订单已支付 outTradeNo={}, bankTransNo={}, casebookId={}" , outTradeNo , bankTransNo , casebookId ) ;
if ( order . hasPayStatusPaid ( ) ) {
log . error ( "[病历复印]订单已支付 outTradeNo={}, bankTransNo={}, applyId={}" , outTradeNo , bankTransNo , applyId ) ;
return ;
}
if ( ! casebookDao . updatePayStateOk ( outTradeNo , bankTransNo ) ) {
log . info ( "[病历]修改支付状态失败 outTradeNo={}, bankTransNo={}, casebook Id={}" , outTradeNo , bankTransNo , casebook Id) ;
log . info ( "[病历复印 ]修改支付状态失败 outTradeNo={}, bankTransNo={}, apply Id={}" , outTradeNo , bankTransNo , apply Id) ;
}
log . info ( "[病历] 开始回调支付状态 borrowNo-{}" , casebookId ) ;
try {
String jsonString = XBDHttpHelper . ExecMethodPost ( XBDEnum . BLSM_Appointment_SetISPay . NAME , params - > {
params . put ( "borrowNo" , casebookId ) ;
log . info ( "[病历复印]调用HIS接口开始... borrowNo-{}" , applyId ) ;
String respJson = XBDHttpHelper . ExecMethodPost ( XBDEnum . BLSM_Appointment_SetISPay . NAME , params - > {
params . put ( "borrowNo" , applyId ) ;
params . put ( "payDateTime" , DateHelper . getCurDateTime ( ) ) ;
} ) ;
log . info ( "[病历]回调返回 resp={}" , jsonString ) ;
String code = JsonHelper . parseObject ( jsonString ) . getString ( "Code" ) ;
log . info ( "[病历复印]HIS接口返回 resp={}" , respJson ) ;
String code = JsonHelper . parseObject ( respJson ) . getString ( "Code" ) ;
if ( code = = null ) {
if ( ! casebookDao . updateNotifyOk ( outTradeNo ) ) {
log . info ( "[病历]更新订单信息失败 outTradeNo={}, bankTransNo={}, casebook Id={}" , outTradeNo , bankTransNo , casebook Id) ;
log . info ( "[病历复印 ]更新HIS 订单信息失败 outTradeNo={}, bankTransNo={}, apply Id={}" , outTradeNo , bankTransNo , apply Id) ;
}
return ;
}
String message = JsonHelper . parseObject ( jsonString ) . getString ( "Msg" ) ;
log . info ( "[病历]回调失败 code={}, message ={}", code , message ) ;
String message = JsonHelper . parseObject ( respJson ) . getString ( "Msg" ) ;
log . error ( "[病历复印]HIS接口调用失败 code={}, message={}, outTradeNo={}, applyId ={}", code , message , outTradeNo , applyId ) ;
if ( ! casebookDao . updateNotifyErr ( outTradeNo , message ) ) {
log . info ( "[病历]更新订单错误信息失败 outTradeNo={}, code={}, message={}" , outTradeNo , code , message ) ;
log . info ( "[病历复印 ]更新HIS 订单错误信息失败 outTradeNo={}, code={}, message={}, outTradeNo={}, applyId ={}" , outTradeNo , code , message , outTradeNo , applyId ) ;
}
} catch ( Exception e ) {
log . error ( e . getMessage ( ) ) ;
}
}
// public boolean isPaid(String patientId, String treatNum, String applyId, String getWay, String useToName) {
// if (patientId == null || treatNum == null) {
// log.info("[病历复印]查重失败,patientId-{},treatNum-{},applyId-{}", patientId, treatNum, applyId);
// return false;
// }
// return new CasebookDao().selectIsPay(patientId, treatNum, applyId, getWay, useToName);
// }
}