|
@@ -1,5 +1,6 @@
|
|
|
package thyyxxk.wxservice_server.service;
|
|
|
|
|
|
+import ch.qos.logback.core.util.TimeUtil;
|
|
|
import com.alibaba.fastjson.JSONObject;
|
|
|
import lombok.extern.slf4j.Slf4j;
|
|
|
import org.apache.http.client.methods.CloseableHttpResponse;
|
|
@@ -32,6 +33,7 @@ import thyyxxk.wxservice_server.utils.*;
|
|
|
|
|
|
import java.nio.charset.StandardCharsets;
|
|
|
import java.util.*;
|
|
|
+import java.util.concurrent.TimeUnit;
|
|
|
|
|
|
/**
|
|
|
* @author dj
|
|
@@ -183,31 +185,43 @@ public class WxApiService {
|
|
|
}
|
|
|
|
|
|
public ResultVo<String> queryOrderState(String tradeNo, QuerySource source) throws Exception {
|
|
|
- WxPayOrder order = dao.selectOrderByTradeNo(tradeNo);
|
|
|
- OrderType orderType = OrderType.get(order.getOrderType());
|
|
|
- JSONObject obj = retryService.queryOrderStateFromTencent(tradeNo, orderType, source);
|
|
|
- String value = obj.getString("trade_state");
|
|
|
- TradeState tradeState = TradeState.get(value);
|
|
|
- if (tradeState.equals(TradeState.SUCCESS)) {
|
|
|
- String successTime = obj.getString("success_time")
|
|
|
- .split("\\+")[0].replace("T", " ");
|
|
|
- dao.updatePayStatusAndPayTime(tradeNo, tradeState.getCode(), successTime);
|
|
|
- switch (orderType) {
|
|
|
- case REGISTRATION:
|
|
|
- return savePayResultService.saveAppointment(order);
|
|
|
- case OUTPATIENT:
|
|
|
- return savePayResultService.saveMzChargeInfo(order);
|
|
|
- case INPATIENT_PRE_PAY:
|
|
|
- return savePayResultService.saveZyYjjInfo(order);
|
|
|
- case SELF_HELP_MACHINE:
|
|
|
- case INSPECTIONS:
|
|
|
- return ResultVoUtil.success("订单已支付。");
|
|
|
- default:
|
|
|
- return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "未识别到的订单类型,请联系服务中心。");
|
|
|
+ while (TradeVectorUtil.tradeNoBeingQuery(tradeNo)) {
|
|
|
+ log.info("订单号:{} 正在查询状态中,进入等待区。", tradeNo);
|
|
|
+ TimeUnit.SECONDS.sleep(1);
|
|
|
+ }
|
|
|
+ TradeVectorUtil.add(tradeNo);
|
|
|
+ try {
|
|
|
+ WxPayOrder order = dao.selectOrderByTradeNo(tradeNo);
|
|
|
+ OrderType orderType = OrderType.get(order.getOrderType());
|
|
|
+ JSONObject obj = retryService.queryOrderStateFromTencent(tradeNo, orderType, source);
|
|
|
+ String value = obj.getString("trade_state");
|
|
|
+ TradeState tradeState = TradeState.get(value);
|
|
|
+ if (tradeState.equals(TradeState.SUCCESS)) {
|
|
|
+ String successTime = obj.getString("success_time")
|
|
|
+ .split("\\+")[0].replace("T", " ");
|
|
|
+ dao.updatePayStatusAndPayTime(tradeNo, tradeState.getCode(), successTime);
|
|
|
+ switch (orderType) {
|
|
|
+ case REGISTRATION:
|
|
|
+ return savePayResultService.saveAppointment(order);
|
|
|
+ case OUTPATIENT:
|
|
|
+ return savePayResultService.saveMzChargeInfo(order);
|
|
|
+ case INPATIENT_PRE_PAY:
|
|
|
+ return savePayResultService.saveZyYjjInfo(order);
|
|
|
+ case SELF_HELP_MACHINE:
|
|
|
+ case INSPECTIONS:
|
|
|
+ return ResultVoUtil.success("订单已支付。");
|
|
|
+ default:
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "未识别到的订单类型,请联系服务中心。");
|
|
|
+ }
|
|
|
}
|
|
|
+ dao.updatePayStatusAndQueryTimes(tradeNo, tradeState.getCode());
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.INTERNAL_SERVER_ERROR, tradeState.getLabel());
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ return ResultVoUtil.fail(ExceptionEnum.LOGICAL_ERROR, "服务器错误,请联系管理员处理。【订单号:" + tradeNo + "】");
|
|
|
+ } finally {
|
|
|
+ TradeVectorUtil.remove(tradeNo);
|
|
|
}
|
|
|
- dao.updatePayStatusAndQueryTimes(tradeNo, tradeState.getCode());
|
|
|
- return ResultVoUtil.fail(ExceptionEnum.INTERNAL_SERVER_ERROR, tradeState.getLabel());
|
|
|
}
|
|
|
|
|
|
public ResultVo<String> generateMzGuideBillPayQrcode(GenMzPayQrcodeParam param) throws Exception {
|