| | |
| | | import io.swagger.annotations.ApiOperation; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | import org.springframework.web.bind.annotation.*; |
| | | |
| | | import javax.annotation.Resource; |
| | |
| | | @RestController |
| | | @RequestMapping("") |
| | | public class OrderController { |
| | | |
| | | private static final String PREPAY_REFUND_PENDING_PREFIX = "PREPAY_REFUND_PENDING:"; |
| | | |
| | | @Autowired |
| | | private IOrderService orderService; |
| | |
| | | |
| | | @Autowired |
| | | private IOrderTaxiService orderTaxiService; |
| | | |
| | | @Resource |
| | | private RedisTemplate<String, Object> redisTemplate; |
| | | |
| | | @Autowired |
| | | private IOrderPrivateCarService orderPrivateCarService; |
| | |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 内部服务调用:预支付多退退款成功后完成司机端订单状态。 |
| | | */ |
| | | @ResponseBody |
| | | @PostMapping("/base/internal/prepayRefundCallback") |
| | | public ResultUtil prepayRefundCallback(Integer orderId, Integer orderType, String refundNo, String refundId) { |
| | | try { |
| | | if (orderId == null || orderType == null || ToolUtil.isEmpty(refundNo)) { |
| | | return ResultUtil.paranErr(); |
| | | } |
| | | if (orderType == 1) { |
| | | orderPrivateCarService.payPrepaidRefundCallback(orderId, refundNo, refundId); |
| | | } else if (orderType == 2) { |
| | | orderTaxiService.payPrepaidRefundCallback(orderId, refundNo, refundId); |
| | | } else { |
| | | return ResultUtil.paranErr(); |
| | | } |
| | | return ResultUtil.success(); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | return ResultUtil.runErr(); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 内部服务调用:查询先付退款是否还在等待回调/状态完成,避免用户端重复发起二次支付。 |
| | | */ |
| | | @ResponseBody |
| | | @PostMapping("/base/internal/prepayRefundPending") |
| | | public ResultUtil prepayRefundPending(Integer orderId, Integer orderType) { |
| | | if (orderId == null || orderType == null) { |
| | | return ResultUtil.paranErr(); |
| | | } |
| | | Map<String, Object> data = new HashMap<>(); |
| | | String key = PREPAY_REFUND_PENDING_PREFIX + orderType + ":" + orderId; |
| | | Object marker = redisTemplate.opsForValue().get(key); |
| | | data.put("pending", marker != null); |
| | | data.put("marker", marker); |
| | | return ResultUtil.success(data); |
| | | } |
| | | } |
| | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | import org.springframework.http.HttpEntity; |
| | | import org.springframework.http.HttpHeaders; |
| | | import org.springframework.http.MediaType; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.LinkedMultiValueMap; |
| | | import org.springframework.util.MultiValueMap; |
| | | import org.springframework.web.client.RestTemplate; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | @Slf4j |
| | | @Service |
| | | public class OrderPrivateCarServiceImpl extends ServiceImpl<OrderPrivateCarMapper, OrderPrivateCar> implements IOrderPrivateCarService { |
| | | |
| | | private static final String PREPAY_REFUND_PENDING_PREFIX = "PREPAY_REFUND_PENDING:"; |
| | | |
| | | @Resource |
| | | private OrderPrivateCarMapper orderPrivateCarMapper; |
| | |
| | | |
| | | @Autowired |
| | | private PayMoneyUtil payMoneyUtil; |
| | | |
| | | @Resource |
| | | private RestTemplate internalRestTemplate; |
| | | |
| | | |
| | | /** |
| | |
| | | request.setRefundOutRequestNo(refundNo); |
| | | request.setRefundAmount(toFen(refundMoney)); |
| | | request.setRefundDesc("快车预支付多退退款"); |
| | | JSONObject response = CbyzxPayUtil.closePayOrder(request); |
| | | markPrepayRefundPending(1, orderPrivateCar.getId(), refundNo, refundMoney); |
| | | JSONObject response; |
| | | try { |
| | | response = requestUserServerPrepayRefund(request); |
| | | } catch (Exception e) { |
| | | clearPrepayRefundPending(1, orderPrivateCar.getId()); |
| | | throw e; |
| | | } |
| | | if (isPrepayRefundSuccess(response)) { |
| | | String responseRefundNo = extractPrepayRefundNo(response); |
| | | if (ToolUtil.isNotEmpty(responseRefundNo)) { |
| | |
| | | } |
| | | finishPrepaidOrder(orderPrivateCar); |
| | | } else { |
| | | clearPrepayRefundPending(1, orderPrivateCar.getId()); |
| | | System.err.println("快车微信先付退款申请失败:" + extractPrepayRefundMessage(response)); |
| | | } |
| | | return; |
| | |
| | | |
| | | private String buildPrepayRefundNo(Integer orderType, Integer orderId) { |
| | | return "PRF_" + orderType + "_" + orderId + "_" + System.currentTimeMillis(); |
| | | } |
| | | |
| | | private String buildPrepayRefundPendingKey(Integer orderType, Integer orderId) { |
| | | return PREPAY_REFUND_PENDING_PREFIX + orderType + ":" + orderId; |
| | | } |
| | | |
| | | private void markPrepayRefundPending(Integer orderType, Integer orderId, String refundNo, Double refundMoney) { |
| | | JSONObject marker = new JSONObject(); |
| | | marker.put("refundNo", refundNo); |
| | | marker.put("refundAmount", refundMoney); |
| | | marker.put("createTime", System.currentTimeMillis()); |
| | | redisTemplate.opsForValue().set(buildPrepayRefundPendingKey(orderType, orderId), marker.toJSONString(), 2, TimeUnit.HOURS); |
| | | } |
| | | |
| | | private void clearPrepayRefundPending(Integer orderType, Integer orderId) { |
| | | redisTemplate.delete(buildPrepayRefundPendingKey(orderType, orderId)); |
| | | } |
| | | |
| | | private JSONObject requestUserServerPrepayRefund(CbyzxPayUtil.ClosePayOrderRequest request) { |
| | | HttpHeaders headers = new HttpHeaders(); |
| | | headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); |
| | | MultiValueMap<String, String> params = new LinkedMultiValueMap<>(); |
| | | params.add("outRequestNo", request.getOutRequestNo()); |
| | | params.add("refundOutRequestNo", request.getRefundOutRequestNo()); |
| | | params.add("refundAmount", String.valueOf(request.getRefundAmount())); |
| | | params.add("refundDesc", request.getRefundDesc()); |
| | | HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(params, headers); |
| | | String response = internalRestTemplate.postForObject( |
| | | "http://user-server/base/internal/cbyzxPrepayRefund", requestEntity, String.class); |
| | | return JSON.parseObject(response); |
| | | } |
| | | |
| | | private Integer toFen(Double amount) { |
| | |
| | | public void payPrepaidRefundCallback(Integer orderId, String refundNo, String refundId) throws Exception { |
| | | OrderPrivateCar orderPrivateCar = this.selectById(orderId); |
| | | if (orderPrivateCar == null || !Integer.valueOf(4).equals(orderPrivateCar.getPrepayStage())) { |
| | | clearPrepayRefundPending(1, orderId); |
| | | return; |
| | | } |
| | | if (ToolUtil.isNotEmpty(orderPrivateCar.getPrepayRefundTime())) { |
| | | clearPrepayRefundPending(1, orderId); |
| | | return; |
| | | } |
| | | if (ToolUtil.isNotEmpty(orderPrivateCar.getPrepayRefundNo()) && !orderPrivateCar.getPrepayRefundNo().equals(refundNo)) { |
| | |
| | | } |
| | | finishPrepaidOrder(orderPrivateCar); |
| | | this.updateById(orderPrivateCar); |
| | | clearPrepayRefundPending(1, orderId); |
| | | pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState()); |
| | | pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState()); |
| | | new Thread(new Runnable() { |
| | |
| | | import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | import org.springframework.http.HttpEntity; |
| | | import org.springframework.http.HttpHeaders; |
| | | import org.springframework.http.MediaType; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.LinkedMultiValueMap; |
| | | import org.springframework.util.MultiValueMap; |
| | | import org.springframework.web.client.RestTemplate; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.text.SimpleDateFormat; |
| | | import java.util.*; |
| | | import java.util.concurrent.TimeUnit; |
| | | |
| | | @Service |
| | | public class OrderTaxiServiceImpl extends ServiceImpl<OrderTaxiMapper, OrderTaxi> implements IOrderTaxiService { |
| | | |
| | | private static final String PREPAY_REFUND_PENDING_PREFIX = "PREPAY_REFUND_PENDING:"; |
| | | |
| | | @Resource |
| | | private OrderTaxiMapper orderTaxiMapper; |
| | |
| | | |
| | | @Autowired |
| | | private PayMoneyUtil payMoneyUtil; |
| | | |
| | | @Resource |
| | | private RestTemplate internalRestTemplate; |
| | | |
| | | |
| | | |
| | |
| | | request.setRefundOutRequestNo(refundNo); |
| | | request.setRefundAmount(toFen(refundMoney)); |
| | | request.setRefundDesc("出租车预支付多退退款"); |
| | | JSONObject response = CbyzxPayUtil.closePayOrder(request); |
| | | markPrepayRefundPending(2, orderTaxi.getId(), refundNo, refundMoney); |
| | | JSONObject response; |
| | | try { |
| | | response = requestUserServerPrepayRefund(request); |
| | | } catch (Exception e) { |
| | | clearPrepayRefundPending(2, orderTaxi.getId()); |
| | | throw e; |
| | | } |
| | | if (isPrepayRefundSuccess(response)) { |
| | | String responseRefundNo = extractPrepayRefundNo(response); |
| | | if (ToolUtil.isNotEmpty(responseRefundNo)) { |
| | |
| | | } |
| | | finishPrepaidOrder(orderTaxi); |
| | | } else { |
| | | clearPrepayRefundPending(2, orderTaxi.getId()); |
| | | System.err.println("出租车微信先付退款申请失败:" + extractPrepayRefundMessage(response)); |
| | | } |
| | | return; |
| | |
| | | |
| | | private String buildPrepayRefundNo(Integer orderType, Integer orderId) { |
| | | return "PRF_" + orderType + "_" + orderId + "_" + System.currentTimeMillis(); |
| | | } |
| | | |
| | | private String buildPrepayRefundPendingKey(Integer orderType, Integer orderId) { |
| | | return PREPAY_REFUND_PENDING_PREFIX + orderType + ":" + orderId; |
| | | } |
| | | |
| | | private void markPrepayRefundPending(Integer orderType, Integer orderId, String refundNo, Double refundMoney) { |
| | | JSONObject marker = new JSONObject(); |
| | | marker.put("refundNo", refundNo); |
| | | marker.put("refundAmount", refundMoney); |
| | | marker.put("createTime", System.currentTimeMillis()); |
| | | redisTemplate.opsForValue().set(buildPrepayRefundPendingKey(orderType, orderId), marker.toJSONString(), 2, TimeUnit.HOURS); |
| | | } |
| | | |
| | | private void clearPrepayRefundPending(Integer orderType, Integer orderId) { |
| | | redisTemplate.delete(buildPrepayRefundPendingKey(orderType, orderId)); |
| | | } |
| | | |
| | | private JSONObject requestUserServerPrepayRefund(CbyzxPayUtil.ClosePayOrderRequest request) { |
| | | HttpHeaders headers = new HttpHeaders(); |
| | | headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); |
| | | MultiValueMap<String, String> params = new LinkedMultiValueMap<>(); |
| | | params.add("outRequestNo", request.getOutRequestNo()); |
| | | params.add("refundOutRequestNo", request.getRefundOutRequestNo()); |
| | | params.add("refundAmount", String.valueOf(request.getRefundAmount())); |
| | | params.add("refundDesc", request.getRefundDesc()); |
| | | HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(params, headers); |
| | | String response = internalRestTemplate.postForObject( |
| | | "http://user-server/base/internal/cbyzxPrepayRefund", requestEntity, String.class); |
| | | return JSON.parseObject(response); |
| | | } |
| | | |
| | | private Integer toFen(Double amount) { |
| | |
| | | public void payPrepaidRefundCallback(Integer orderId, String refundNo, String refundId) throws Exception { |
| | | OrderTaxi orderTaxi = this.selectById(orderId); |
| | | if (orderTaxi == null || !Integer.valueOf(4).equals(orderTaxi.getPrepayStage())) { |
| | | clearPrepayRefundPending(2, orderId); |
| | | return; |
| | | } |
| | | if (ToolUtil.isNotEmpty(orderTaxi.getPrepayRefundTime())) { |
| | | clearPrepayRefundPending(2, orderId); |
| | | return; |
| | | } |
| | | if (ToolUtil.isNotEmpty(orderTaxi.getPrepayRefundNo()) && !orderTaxi.getPrepayRefundNo().equals(refundNo)) { |
| | |
| | | } |
| | | finishPrepaidOrder(orderTaxi); |
| | | this.updateById(orderTaxi); |
| | | clearPrepayRefundPending(2, orderId); |
| | | pushUtil.pushOrderState(1, orderTaxi.getUserId(), orderTaxi.getId(), 2, orderTaxi.getState()); |
| | | pushUtil.pushOrderState(2, orderTaxi.getDriverId(), orderTaxi.getId(), 2, orderTaxi.getState()); |
| | | } |
| | |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | | import org.springframework.data.redis.core.RedisTemplate; |
| | | import org.springframework.http.HttpEntity; |
| | | import org.springframework.http.HttpHeaders; |
| | | import org.springframework.http.MediaType; |
| | | import org.springframework.util.LinkedMultiValueMap; |
| | | import org.springframework.util.MultiValueMap; |
| | | import org.springframework.web.bind.annotation.*; |
| | | import org.springframework.web.client.RestTemplate; |
| | | |
| | | import javax.annotation.Resource; |
| | | import javax.servlet.http.HttpServletRequest; |
| | |
| | | |
| | | @Resource |
| | | private RedisTemplate<String, Object> redisTemplate; |
| | | |
| | | @Resource |
| | | private RestTemplate internalRestTemplate; |
| | | |
| | | @Resource |
| | | private ISystemPriceCityService systemPriceCityService; |
| | |
| | | */ |
| | | @ResponseBody |
| | | @PostMapping("/base/cbyzxCancelOrderTaxi") |
| | | public Map<String, Object> cbyzxCancelOrderTaxi(HttpServletRequest request, HttpServletResponse response) { |
| | | // 不做处理 退款已同步处理 |
| | | return buildCbyzxCallbackResponse(0, "success"); |
| | | public Map<String, Object> cbyzxCancelOrderTaxi(@RequestBody(required = false) String params, |
| | | HttpServletRequest request, HttpServletResponse response) { |
| | | try { |
| | | JSONObject payload = parseCbyzxCallbackPayload(params, request); |
| | | String refundNo = firstNotBlank(payload, |
| | | "refundOutRequestNo", "refund_out_request_no", "outRefundNo", "out_refund_no", |
| | | "merchantRefundSerialNo", "merchant_refund_serial_no"); |
| | | if (StringUtils.isBlank(refundNo)) { |
| | | return buildCbyzxCallbackResponse(0, "success"); |
| | | } |
| | | if (!refundNo.startsWith("PRF_")) { |
| | | return buildCbyzxCallbackResponse(0, "success"); |
| | | } |
| | | String[] split = refundNo.split("_"); |
| | | if (split.length < 4 || !StringUtils.isNumeric(split[1]) || !StringUtils.isNumeric(split[2])) { |
| | | return buildCbyzxCallbackResponse(1, "invalid refundOutRequestNo"); |
| | | } |
| | | Integer orderType = Integer.valueOf(split[1]); |
| | | Integer orderId = Integer.valueOf(split[2]); |
| | | String refundId = firstNotBlank(payload, |
| | | "refundId", "refund_id", "gatewaySerialNo", "gateway_serial_no", |
| | | "thirdRefundNo", "third_refund_no", "merchantRefundSerialNo", "merchant_refund_serial_no"); |
| | | Map<String, Object> driverResult = notifyDriverPrepayRefund(orderId, orderType, refundNo, refundId); |
| | | Object code = driverResult == null ? null : driverResult.get("code"); |
| | | if (code != null && "200".equals(String.valueOf(code))) { |
| | | return buildCbyzxCallbackResponse(0, "success"); |
| | | } |
| | | log.error("创博优退款回调转发司机端失败,payload={}, driverResult={}", payload, driverResult); |
| | | return buildCbyzxCallbackResponse(1, "driver callback fail"); |
| | | } catch (Exception e) { |
| | | log.error("创博优退款回调处理失败", e); |
| | | return buildCbyzxCallbackResponse(1, "fail"); |
| | | } |
| | | |
| | | // try { |
| | | // Map<String, String> map = payMoneyUtil.weixinpayCallback(request); |
| | |
| | | // } catch (Exception e) { |
| | | // e.printStackTrace(); |
| | | // } |
| | | } |
| | | |
| | | /** |
| | | * 内部服务调用:创博优微信先付订单退款。 |
| | | * 只负责调用退款网关并返回原始结果,不修改司机端订单业务状态。 |
| | | */ |
| | | @ResponseBody |
| | | @PostMapping("/base/internal/cbyzxPrepayRefund") |
| | | public JSONObject cbyzxPrepayRefund(String outRequestNo, String refundOutRequestNo, |
| | | Integer refundAmount, String refundDesc) { |
| | | JSONObject error = new JSONObject(); |
| | | if (ToolUtil.isEmpty(outRequestNo)) { |
| | | error.put("code", 1); |
| | | error.put("msg", "missing outRequestNo"); |
| | | return error; |
| | | } |
| | | if (ToolUtil.isEmpty(refundOutRequestNo)) { |
| | | error.put("code", 1); |
| | | error.put("msg", "missing refundOutRequestNo"); |
| | | return error; |
| | | } |
| | | if (refundAmount == null || refundAmount <= 0) { |
| | | error.put("code", 1); |
| | | error.put("msg", "invalid refundAmount"); |
| | | return error; |
| | | } |
| | | try { |
| | | CbyzxPayUtil.ClosePayOrderRequest closeRequest = new CbyzxPayUtil.ClosePayOrderRequest(); |
| | | closeRequest.setOutRequestNo(outRequestNo); |
| | | closeRequest.setRefundOutRequestNo(refundOutRequestNo); |
| | | closeRequest.setRefundAmount(refundAmount); |
| | | closeRequest.setRefundDesc(ToolUtil.isNotEmpty(refundDesc) ? refundDesc : "微信先付订单退款"); |
| | | return CbyzxPayUtil.closePayOrder(closeRequest); |
| | | } catch (Exception e) { |
| | | log.error("内部创博优先付退款失败,outRequestNo={}, refundOutRequestNo={}", |
| | | outRequestNo, refundOutRequestNo, e); |
| | | error.put("code", 1); |
| | | error.put("msg", e.getMessage()); |
| | | return error; |
| | | } |
| | | } |
| | | |
| | | /** |
| | |
| | | return result; |
| | | } |
| | | |
| | | private JSONObject parseCbyzxCallbackPayload(String params, HttpServletRequest request) { |
| | | JSONObject payload = new JSONObject(); |
| | | if (StringUtils.isNotBlank(params)) { |
| | | try { |
| | | JSONObject body = JSONObject.parseObject(params); |
| | | if (body != null) { |
| | | payload.putAll(body); |
| | | } |
| | | } catch (Exception e) { |
| | | log.warn("创博优回调body不是JSON,params={}", params); |
| | | } |
| | | } |
| | | if (request != null && request.getParameterMap() != null) { |
| | | for (String key : request.getParameterMap().keySet()) { |
| | | String[] values = request.getParameterValues(key); |
| | | if (values == null || values.length == 0) { |
| | | continue; |
| | | } |
| | | payload.put(key, values.length == 1 ? values[0] : Arrays.asList(values)); |
| | | } |
| | | } |
| | | return payload; |
| | | } |
| | | |
| | | private String firstNotBlank(JSONObject payload, String... keys) { |
| | | if (payload == null || keys == null) { |
| | | return null; |
| | | } |
| | | for (String key : keys) { |
| | | Object value = payload.get(key); |
| | | if (value == null) { |
| | | continue; |
| | | } |
| | | if (value instanceof Collection) { |
| | | for (Object item : (Collection<?>) value) { |
| | | String text = item == null ? null : String.valueOf(item); |
| | | if (StringUtils.isNotBlank(text)) { |
| | | return text; |
| | | } |
| | | } |
| | | } else { |
| | | String text = String.valueOf(value); |
| | | if (StringUtils.isNotBlank(text)) { |
| | | return text; |
| | | } |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | private Map<String, Object> notifyDriverPrepayRefund(Integer orderId, Integer orderType, String refundNo, String refundId) { |
| | | HttpHeaders headers = new HttpHeaders(); |
| | | headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); |
| | | MultiValueMap<String, Object> postParams = new LinkedMultiValueMap<>(); |
| | | postParams.add("orderId", orderId); |
| | | postParams.add("orderType", orderType); |
| | | postParams.add("refundNo", refundNo); |
| | | postParams.add("refundId", refundId); |
| | | HttpEntity<MultiValueMap<String, Object>> requestEntity = new HttpEntity<>(postParams, headers); |
| | | return internalRestTemplate.postForObject( |
| | | "http://driver-server/base/internal/prepayRefundCallback", requestEntity, Map.class); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 小件物流差价微信支付回调 |
| | |
| | | if (Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) && Integer.valueOf(4).equals(orderPrivateCar.getPrepayStage())) { |
| | | return ResultUtil.error("订单退款处理中,请等待退款完成", ""); |
| | | } |
| | | if (isPrepayRefundPending(1, orderId)) { |
| | | return ResultUtil.error("退款处理中,请稍后刷新", ""); |
| | | } |
| | | normalizePrivateCarPrepayFirstStageBeforePay(orderPrivateCar); |
| | | System.out.println("!!!" + orderPrivateCar + "!!!!"); |
| | | Integer uid = orderPrivateCar.getUserId(); |
| | |
| | | } |
| | | if (Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) && Integer.valueOf(4).equals(orderPrivateCar.getPrepayStage())) { |
| | | return ResultUtil.error("订单退款处理中,请等待退款完成", new ArrayList<>()); |
| | | } |
| | | if (isPrepayRefundPending(1, orderId)) { |
| | | return ResultUtil.error("退款处理中,请稍后刷新", new ArrayList<>()); |
| | | } |
| | | normalizePrivateCarPrepayFirstStageBeforePay(orderPrivateCar); |
| | | |
| | |
| | | return "BAL_" + orderType + "_" + orderId + "_" + System.currentTimeMillis(); |
| | | } |
| | | |
| | | private boolean isPrepayRefundPending(Integer orderType, Integer orderId) { |
| | | try { |
| | | HttpHeaders headers = new HttpHeaders(); |
| | | headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); |
| | | MultiValueMap<String, String> params = new LinkedMultiValueMap<>(); |
| | | params.add("orderType", String.valueOf(orderType)); |
| | | params.add("orderId", String.valueOf(orderId)); |
| | | HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(params, headers); |
| | | Map response = internalRestTemplate.postForObject( |
| | | "http://driver-server/base/internal/prepayRefundPending", requestEntity, Map.class); |
| | | if (response == null || !ResultUtil.SUCCESS.equals(response.get("code"))) { |
| | | return false; |
| | | } |
| | | Object data = response.get("data"); |
| | | if (data instanceof Map) { |
| | | return Boolean.TRUE.equals(((Map) data).get("pending")); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | private Double appendPayMoney(Double source, Double amount) { |
| | | return new BigDecimal(source == null ? 0D : source) |
| | | .add(new BigDecimal(amount == null ? 0D : amount)) |
| | |
| | | if (Integer.valueOf(1).equals(orderTaxi.getPaymentMode()) && Integer.valueOf(4).equals(orderTaxi.getPrepayStage())) { |
| | | return ResultUtil.error("订单退款处理中,请等待退款完成", ""); |
| | | } |
| | | if (isPrepayRefundPending(2, orderId)) { |
| | | return ResultUtil.error("退款处理中,请稍后刷新", ""); |
| | | } |
| | | Integer uid = orderTaxi.getUserId(); |
| | | Double orderMoney = (2 == orderTaxi.getAbnormal() && 2 == orderTaxi.getAbnormalStatus() ? orderTaxi.getResponsibilityMoney().doubleValue() : orderTaxi.getOrderMoney()); |
| | | UserInfo userInfo = userInfoService.selectById(uid); |
| | |
| | | } |
| | | if (Integer.valueOf(1).equals(orderTaxi.getPaymentMode()) && Integer.valueOf(4).equals(orderTaxi.getPrepayStage())) { |
| | | return ResultUtil.error("订单退款处理中,请等待退款完成", ""); |
| | | } |
| | | if (isPrepayRefundPending(2, orderId)) { |
| | | return ResultUtil.error("退款处理中,请稍后刷新", ""); |
| | | } |
| | | Integer uid = orderTaxi.getUserId(); |
| | | Double orderMoney = (2 == orderTaxi.getAbnormal() && 2 == orderTaxi.getAbnormalStatus() ? orderTaxi.getResponsibilityMoney().doubleValue() : orderTaxi.getOrderMoney()); |
| | |
| | | return "BAL_" + orderType + "_" + orderId + "_" + System.currentTimeMillis(); |
| | | } |
| | | |
| | | private boolean isPrepayRefundPending(Integer orderType, Integer orderId) { |
| | | try { |
| | | HttpHeaders headers = new HttpHeaders(); |
| | | headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); |
| | | MultiValueMap<String, String> params = new LinkedMultiValueMap<>(); |
| | | params.add("orderType", String.valueOf(orderType)); |
| | | params.add("orderId", String.valueOf(orderId)); |
| | | HttpEntity<MultiValueMap<String, String>> requestEntity = new HttpEntity<>(params, headers); |
| | | Map response = internalRestTemplate.postForObject( |
| | | "http://driver-server/base/internal/prepayRefundPending", requestEntity, Map.class); |
| | | if (response == null || !ResultUtil.SUCCESS.equals(response.get("code"))) { |
| | | return false; |
| | | } |
| | | Object data = response.get("data"); |
| | | if (data instanceof Map) { |
| | | return Boolean.TRUE.equals(((Map) data).get("pending")); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | private Double appendPayMoney(Double source, Double amount) { |
| | | return new BigDecimal(source == null ? 0D : source) |
| | | .add(new BigDecimal(amount == null ? 0D : amount)) |