|
@@ -7,6 +7,7 @@ import com.wechat.pay.java.service.payments.model.Transaction;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
+import thyyxxk.wxservice_server.config.exception.BizException;
|
|
|
import thyyxxk.wxservice_server.config.exception.ExceptionEnum;
|
|
|
import thyyxxk.wxservice_server.constant.OrderType;
|
|
|
import thyyxxk.wxservice_server.constant.medins.Insutype;
|
|
@@ -137,77 +138,71 @@ public class WxApiService {
|
|
|
return ResultVoUtil.success(response);
|
|
|
}
|
|
|
|
|
|
- public String queryOrderState(String tradeNo) {
|
|
|
- try {
|
|
|
- while (TradeVectorUtil.tradeNoBeingQuery(tradeNo) || TradeVectorUtil.tradeNoBeingRefund(tradeNo)) {
|
|
|
- log.info("订单号:{} 正在查询状态中,进入等待区。", tradeNo);
|
|
|
- TimeUnit.SECONDS.sleep(3);
|
|
|
- }
|
|
|
- TradeVectorUtil.addBeingQuery(tradeNo);
|
|
|
- WxPayOrder order = dao.selectOrderByTradeNo(tradeNo);
|
|
|
- if (null == order) {
|
|
|
- return "ERROR:订单不存在。【订单号:" + tradeNo + "】";
|
|
|
- }
|
|
|
- OrderType orderType = OrderType.get(order.getOrderType());
|
|
|
- int hasSaved = 0;
|
|
|
- if (orderType == OrderType.REGISTRATION || orderType == OrderType.CLINIC_REGISTER) {
|
|
|
- hasSaved = dao.alreadyPaidRegisterFee(order.getTradeNo());
|
|
|
- } else if (orderType == OrderType.OUTPATIENT) {
|
|
|
- hasSaved = dao.alreadyPayed(order.getTradeNo());
|
|
|
- }
|
|
|
- if (hasSaved == 1) {
|
|
|
- dao.updateSuccessHisStatus(tradeNo);
|
|
|
- if (orderType == OrderType.REGISTRATION) {
|
|
|
- log.info("订单号:{} 的挂号信息已保存,无需再次查询订单状态。", order.getTradeNo());
|
|
|
- return DateUtil.formatDatetime(order.getPayDatetime());
|
|
|
- }
|
|
|
- log.info("订单号:{} 的门诊缴费信息已保存,无需再次查询订单状态。", order.getTradeNo());
|
|
|
+ public String queryOrderState(String tradeNo) throws Exception {
|
|
|
+ while (TradeVectorUtil.tradeNoBeingQuery(tradeNo) || TradeVectorUtil.tradeNoBeingRefund(tradeNo)) {
|
|
|
+ log.info("订单号:{} 正在查询状态中,进入等待区。", tradeNo);
|
|
|
+ TimeUnit.SECONDS.sleep(3);
|
|
|
+ }
|
|
|
+ WxPayOrder order = dao.selectOrderByTradeNo(tradeNo);
|
|
|
+ if (null == order) {
|
|
|
+ throw new BizException("订单不存在。【订单号:" + tradeNo + "】");
|
|
|
+ }
|
|
|
+ OrderType orderType = OrderType.get(order.getOrderType());
|
|
|
+ int hasSaved = 0;
|
|
|
+ if (orderType == OrderType.REGISTRATION || orderType == OrderType.CLINIC_REGISTER) {
|
|
|
+ hasSaved = dao.alreadyPaidRegisterFee(order.getTradeNo());
|
|
|
+ } else if (orderType == OrderType.OUTPATIENT) {
|
|
|
+ hasSaved = dao.alreadyPayed(order.getTradeNo());
|
|
|
+ }
|
|
|
+ if (hasSaved == 1) {
|
|
|
+ dao.updateSuccessHisStatus(tradeNo);
|
|
|
+ if (orderType == OrderType.REGISTRATION) {
|
|
|
+ log.info("订单号:{} 的挂号信息已保存,无需再次查询订单状态。", order.getTradeNo());
|
|
|
return DateUtil.formatDatetime(order.getPayDatetime());
|
|
|
}
|
|
|
-
|
|
|
- Transaction transaction;
|
|
|
- if (order.getCashpayAmt().compareTo(BigDecimal.ZERO) == 0) {
|
|
|
- transaction = new Transaction();
|
|
|
- transaction.setTradeState(Transaction.TradeStateEnum.SUCCESS);
|
|
|
- transaction.setSuccessTime(DateUtil.formatDatetime(new Date()));
|
|
|
- } else {
|
|
|
- WechatPayGlobalRequest request = new WechatPayGlobalRequest.Builder()
|
|
|
- .outTradeNo(tradeNo).build();
|
|
|
- transaction = new WeChatPayService().queryOrderState(request);
|
|
|
- }
|
|
|
- Transaction.TradeStateEnum tradeState = transaction.getTradeState();
|
|
|
- if (tradeState == Transaction.TradeStateEnum.SUCCESS) {
|
|
|
- String successTime = transaction.getSuccessTime()
|
|
|
- .split("\\+")[0].replace("T", " ");
|
|
|
- dao.updatePayStatusAndPayTime(tradeNo, tradeState, successTime);
|
|
|
- switch (orderType) {
|
|
|
- case CLINIC_REGISTER:
|
|
|
- return savePayResultService.saveClinicRegister(order, successTime);
|
|
|
- case REGISTRATION:
|
|
|
- return savePayResultService.saveAppointment(order, successTime);
|
|
|
- case OUTPATIENT:
|
|
|
- return savePayResultService.saveMzChargeInfo(order, successTime);
|
|
|
- case INPATIENT_PRE_PAY:
|
|
|
- return savePayResultService.saveZyYjjInfo(order, successTime);
|
|
|
- case SELF_HELP_MACHINE:
|
|
|
- return "订单已支付。";
|
|
|
- case INSPECTIONS:
|
|
|
- savePayResultService.notifyCytj(order, successTime);
|
|
|
- return "订单已支付。";
|
|
|
- case COUPON_PURCHASE:
|
|
|
- return savePayResultService.saveCouponPurchase(order, successTime);
|
|
|
- default:
|
|
|
- return "ERROR:未识别到的订单类型,请联系服务中心。";
|
|
|
- }
|
|
|
- }
|
|
|
- dao.updatePayStatusAndQueryTimes(tradeNo, tradeState);
|
|
|
- return "ERROR:" + transaction.getTradeStateDesc();
|
|
|
- } catch (Exception e) {
|
|
|
- log.error("查询订单状态出错:", e);
|
|
|
- return "ERROR:服务器错误,请联系管理员处理。【订单号:" + tradeNo + "】";
|
|
|
- } finally {
|
|
|
+ log.info("订单号:{} 的门诊缴费信息已保存,无需再次查询订单状态。", order.getTradeNo());
|
|
|
+ return DateUtil.formatDatetime(order.getPayDatetime());
|
|
|
+ }
|
|
|
+ TradeVectorUtil.addBeingQuery(tradeNo);
|
|
|
+ Transaction transaction;
|
|
|
+ if (order.getCashpayAmt().compareTo(BigDecimal.ZERO) == 0) {
|
|
|
+ transaction = new Transaction();
|
|
|
+ transaction.setTradeState(Transaction.TradeStateEnum.SUCCESS);
|
|
|
+ transaction.setSuccessTime(DateUtil.formatDatetime(new Date()));
|
|
|
+ } else {
|
|
|
+ WechatPayGlobalRequest request = new WechatPayGlobalRequest.Builder()
|
|
|
+ .outTradeNo(tradeNo).build();
|
|
|
+ transaction = new WeChatPayService().queryOrderState(request);
|
|
|
+ }
|
|
|
+ Transaction.TradeStateEnum tradeState = transaction.getTradeState();
|
|
|
+ if (tradeState == Transaction.TradeStateEnum.SUCCESS) {
|
|
|
+ String successTime = transaction.getSuccessTime()
|
|
|
+ .split("\\+")[0].replace("T", " ");
|
|
|
+ dao.updatePayStatusAndPayTime(tradeNo, tradeState, successTime);
|
|
|
TradeVectorUtil.removeBeingQuery(tradeNo);
|
|
|
+ switch (orderType) {
|
|
|
+ case CLINIC_REGISTER:
|
|
|
+ return savePayResultService.saveClinicRegister(order, successTime);
|
|
|
+ case REGISTRATION:
|
|
|
+ return savePayResultService.saveAppointment(order, successTime);
|
|
|
+ case OUTPATIENT:
|
|
|
+ return savePayResultService.saveMzChargeInfo(order, successTime);
|
|
|
+ case INPATIENT_PRE_PAY:
|
|
|
+ return savePayResultService.saveZyYjjInfo(order, successTime);
|
|
|
+ case SELF_HELP_MACHINE:
|
|
|
+ case PACS_PRINT:
|
|
|
+ return "订单已支付。";
|
|
|
+ case INSPECTIONS:
|
|
|
+ savePayResultService.notifyCytj(order, successTime);
|
|
|
+ return "订单已支付。";
|
|
|
+ case COUPON_PURCHASE:
|
|
|
+ return savePayResultService.saveCouponPurchase(order, successTime);
|
|
|
+ default:
|
|
|
+ throw new BizException("未识别到的订单类型,请联系服务中心。");
|
|
|
+ }
|
|
|
}
|
|
|
+ dao.updatePayStatusAndQueryTimes(tradeNo, tradeState);
|
|
|
+ throw new BizException(transaction.getTradeStateDesc());
|
|
|
}
|
|
|
|
|
|
public void notifyCytj(String tradeNo) {
|