You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
189 lines
7.9 KiB
189 lines
7.9 KiB
package com.ynxbd.common.service;
|
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
import com.ynxbd.common.action.pay.PQREnum;
|
|
import com.ynxbd.common.bean.enums.MerchantEnum;
|
|
import com.ynxbd.common.bean.pay.PayCasebook;
|
|
import com.ynxbd.common.dao.CasebookDao;
|
|
import com.ynxbd.common.helper.common.CodeHelper;
|
|
import com.ynxbd.common.helper.common.DateHelper;
|
|
import com.ynxbd.common.helper.common.JsonHelper;
|
|
import com.ynxbd.common.helper.xbd.XBDEnum;
|
|
import com.ynxbd.common.helper.xbd.XBDHttpHelper;
|
|
import com.ynxbd.common.result.Result;
|
|
import com.ynxbd.common.result.ResultEnum;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.apache.commons.lang3.ObjectUtils;
|
|
|
|
import java.math.BigDecimal;
|
|
|
|
@Slf4j
|
|
public class CasebookService {
|
|
|
|
public Result placeOrder(MerchantEnum merchantEnum, String ip, String openid, String patientId, String treatNum, String totalFee, String applyId, String getWay, String useToName) {
|
|
if (openid == null || patientId == null || totalFee == null) {
|
|
return Result.error(ResultEnum.PARAM_IS_DEFECT);
|
|
}
|
|
|
|
if (new BigDecimal(totalFee).compareTo(BigDecimal.ZERO) == 0) {
|
|
return Result.error(ResultEnum.PAY_MONEY_IS_ZERO);
|
|
}
|
|
|
|
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 (!updatePrepayInfo(applyId, 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;
|
|
JSONObject respJson = PayService.createOrder(merchantEnum, openid, patientId, totalFee, outTradeNo, PQREnum.CASEBOOK.CODE, ip, body);
|
|
if (respJson == null) {
|
|
return Result.error(ResultEnum.PAY_ERROR); // 支付异常
|
|
}
|
|
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);
|
|
return false;
|
|
}
|
|
return new CasebookDao().selectIsExit(patientId, treatNum, getWay, useToName);
|
|
}
|
|
|
|
|
|
/**
|
|
* 更新预支付订单信息
|
|
*
|
|
* @param applyId 申请id
|
|
* @param treatNum 住院号
|
|
* @param totalFee 金额
|
|
* @param outTradeNo 订单号
|
|
* @return bool
|
|
*/
|
|
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().updatePrepayInfo(applyId, treatNum, totalFee, outTradeNo);
|
|
}
|
|
|
|
/**
|
|
* 根据预约申请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().selectOrder(applyId, treatNum);
|
|
}
|
|
|
|
|
|
/**
|
|
* [病历复印]新增预约记录
|
|
*
|
|
* @param casebook 订单信息
|
|
* @return bool
|
|
*/
|
|
public long addApply(PayCasebook casebook, String openId, String patientId) {
|
|
if (casebook == null) {
|
|
log.info("casebook is null");
|
|
return -1;
|
|
}
|
|
return new CasebookDao().insert(casebook, openId, patientId);
|
|
}
|
|
|
|
|
|
/**
|
|
* 预约成功后,记录申请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 applyId = order.getApplyId();
|
|
if (ObjectUtils.isEmpty(applyId)) {
|
|
log.error("[病历复印]回调:病历申请ID缺失 outTradeNo={}, bankTransNo={}, applyId={}", outTradeNo, bankTransNo, applyId);
|
|
return;
|
|
}
|
|
|
|
if (order.hasPayStatusPaid()) {
|
|
log.error("[病历复印]订单已支付 outTradeNo={}, bankTransNo={}, applyId={}", outTradeNo, bankTransNo, applyId);
|
|
return;
|
|
}
|
|
|
|
if (!casebookDao.updatePayStateOk(outTradeNo, bankTransNo)) {
|
|
log.info("[病历复印]修改支付状态失败 outTradeNo={}, bankTransNo={}, applyId={}", outTradeNo, bankTransNo, applyId);
|
|
}
|
|
|
|
try {
|
|
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("[病历复印]HIS接口返回 resp={}", respJson);
|
|
String code = JsonHelper.parseObject(respJson).getString("Code");
|
|
if (code == null) {
|
|
if (!casebookDao.updateNotifyOk(outTradeNo)) {
|
|
log.info("[病历复印]更新HIS订单信息失败 outTradeNo={}, bankTransNo={}, applyId={}", outTradeNo, bankTransNo, applyId);
|
|
}
|
|
return;
|
|
}
|
|
|
|
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("[病历复印]更新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);
|
|
// }
|
|
}
|
|
|