From dc4972749d8dc399b02a548adfd12119fc8c2bcd Mon Sep 17 00:00:00 2001
From: longz <longzhaoz@qq.com>
Date: 星期一, 11 五月 2026 20:49:52 +0800
Subject: [PATCH] fix bugs
---
UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 1033 ++++++++++++++++++++++++++++++++++++++++++++++----------
1 files changed, 838 insertions(+), 195 deletions(-)
diff --git a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index 556a429..c869896 100644
--- a/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/UserYKDTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -1,5 +1,6 @@
package com.stylefeng.guns.modular.specialTrain.server.impl;
+import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
@@ -46,6 +47,7 @@
import java.math.RoundingMode;
import java.text.SimpleDateFormat;
import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.concurrent.TimeUnit;
@@ -57,7 +59,7 @@
@Service
public class OrderPrivateCarServiceImpl extends ServiceImpl<OrderPrivateCarMapper, OrderPrivateCar> implements IOrderPrivateCarService {
- public static List<Integer> orderIds = new ArrayList<>();
+ public static Set<Integer> orderIds = ConcurrentHashMap.newKeySet();;
@Resource
private OrderPrivateCarMapper orderPrivateCarMapper;
@Resource
@@ -130,6 +132,9 @@
private IOrderTaxiService orderTaxiService;
@Autowired
private PayMoneyUtil payMoneyUtil;
+
+ @Autowired
+ private CbyzxOrderPayHelper cbyzxOrderPayHelper;
@Autowired
private TAbnormalPayOrderMapper abnormalPayOrderMapper;
@Autowired
@@ -307,6 +312,9 @@
if (orderSource != 2) { // 扫码下单跳过先付判断(扫码下单已有固定司机)
TSysPaymentMode paymentMode = tSysPaymentModeService.selectOne(
new EntityWrapper<TSysPaymentMode>().last("LIMIT 1"));
+ if (paymentMode != null && paymentMode.getPrivateType() != null) {
+ baseWarpper.setPaymentMode(paymentMode.getPrivateType());
+ }
if (paymentMode != null && Integer.valueOf(1).equals(paymentMode.getPrivateType())) {
// 先付模式:计算预估金额,订单状态改为7(待支付)
Company payCompany = companyCityService.query(geocode.get("districtCode"));
@@ -338,6 +346,7 @@
Double estimateMoney = Double.valueOf(amountMap.get("zongfeiyong").toString());
orderPrivateCar.setEstimateAmount(estimateMoney);
orderPrivateCar.setOrderMoney(estimateMoney);
+ baseWarpper.setEstimateAmount(estimateMoney);
}
}
// 先付模式:覆盖状态为7(待支付),不进行派单
@@ -429,6 +438,7 @@
orderPrivateCar.setTotalPeopleNum(peopleNum);
orderPrivateCar.setIsReassign(1);
orderPrivateCar.setIsDelete(1);
+ orderPrivateCar.setPrepayStage(Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) ? 1 : 0);
this.insert(orderPrivateCar);
if (orderSource == 2) {//扫码下单
@@ -504,6 +514,7 @@
orderPrivateCar.setTotalPeopleNum(peopleNum);
orderPrivateCar.setIsReassign(1);
orderPrivateCar.setIsDelete(1);
+ orderPrivateCar.setPrepayStage(Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) ? 1 : 0);
this.insert(orderPrivateCar);
this.pushOrder(orderPrivateCar);
} else {
@@ -521,6 +532,7 @@
orderPrivateCar.setIsReassign(1);
orderPrivateCar.setIsDelete(1);
orderPrivateCar.setPid(orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid());
+ orderPrivateCar.setPrepayStage(Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) ? 1 : 0);
this.insert(orderPrivateCar);
//修改总订单人数
OrderPrivateCar orderPrivateCar2 = new OrderPrivateCar();
@@ -691,6 +703,49 @@
orderPrivateCar.setPassengersPhone(userInfo.getPhone());
}
orderPrivateCar.setState(1);
+ if (orderSource != 2) {
+ TSysPaymentMode paymentMode = tSysPaymentModeService.selectOne(
+ new EntityWrapper<TSysPaymentMode>().last("LIMIT 1"));
+ if (paymentMode != null && paymentMode.getPrivateType() != null) {
+ baseWarpper.setPaymentMode(paymentMode.getPrivateType());
+ }
+ if (paymentMode != null && Integer.valueOf(1).equals(paymentMode.getPrivateType())) {
+ Company payCompany = companyCityService.query(geocode.get("districtCode"));
+ if (payCompany != null) {
+ try {
+ double distanceMeters = orderPrivateCar.getEstimateMileage() != null
+ ? orderPrivateCar.getEstimateMileage() : 0;
+ long durationSeconds = orderPrivateCar.getEstimateTime() != null
+ ? (long) (orderPrivateCar.getEstimateTime() * 60) : 0;
+ List<ServerCarModelWarpper> priceList = serverCarModelService.getPrice(
+ payCompany.getId(), distanceMeters, durationSeconds, 0L, 1, geocode);
+ Double estimateMoney = getBatchEstimateAmount(serverCarModel, priceList);
+ if (estimateMoney != null) {
+ orderPrivateCar.setEstimateAmount(estimateMoney);
+ orderPrivateCar.setOrderMoney(estimateMoney);
+ orderPrivateCar.setState(7);
+ orderPrivateCar.setCompanyId(payCompany.getId());
+ orderPrivateCar.setPaymentMode(1);
+ baseWarpper.setEstimateAmount(estimateMoney);
+ } else {
+ orderPrivateCar.setPaymentMode(2);
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ orderPrivateCar.setPaymentMode(2);
+ orderPrivateCar.setState(1);
+ }
+ } else {
+ orderPrivateCar.setPaymentMode(1);
+ }
+ } else {
+ orderPrivateCar.setPaymentMode(
+ (paymentMode != null && paymentMode.getPrivateType() != null)
+ ? paymentMode.getPrivateType()
+ : 2
+ );
+ }
+ }
orderPrivateCar.setInsertTime(new Date());
orderPrivateCar.setTravelTime(travelTime);
orderPrivateCar.setOrderType(reservation);
@@ -698,138 +753,126 @@
orderPrivateCar.setTotalPeopleNum(peopleNum);
orderPrivateCar.setIsReassign(1);
orderPrivateCar.setIsDelete(1);
+ orderPrivateCar.setPrepayStage(Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) ? 1 : 0);
//判断独享,一口价,拼车
JSONArray jsonArray = JSON.parseArray(serverCarModel);
this.insert(orderPrivateCar);
-
- for (int i = 0; i < jsonArray.size(); i++) {
- JSONObject jsonObject1 = jsonArray.getJSONObject(i);
- Integer serverCarModelId = jsonObject1.getInteger("serverCarModelId");
- Integer rideType = jsonObject1.getInteger("rideType");
- if (0 == serverCarModelId) {
- OrderTaxi orderTaxi = new OrderTaxi();
- orderTaxi.setId(orderPrivateCar.getId());
- orderTaxi.setState(1);
- orderTaxi.setUserId(orderPrivateCar.getUserId());
- orderTaxi.setStartLon(orderPrivateCar.getStartLon());
- orderTaxi.setStartLat(orderPrivateCar.getStartLat());
- orderTaxiService.pushOrder(orderTaxi, 3);
- }
-
- if (rideType != 3) {
- //推单操作-独享
- this.pushOrder(orderPrivateCar.getId(), rideType, serverCarModelId, orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat());
- } else {
- OrderPrivateCar orderPrivateCar1 = null;
- OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
- TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("openCityId", openCity.getId()));
- //判断是否有相同线路的拼车-有直接拼成功,或者推送拼车订单
- List<OrderPrivateCar> orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType", 3).in("state", "2,3,4").le("totalPeopleNum", 4 - peopleNum));
- for (OrderPrivateCar order : orderList) {
- if (spellOrderRule != null) {
- JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent());
- //判断时间
- if (travelTime.getTime() >= order.getTravelTime().getTime() - jsonObject.getInteger("num5") * 60000L && travelTime.getTime() <= order.getTravelTime().getTime() + jsonObject.getInteger("num6") * 60000L) {
- // Double dis1 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), order.getStartLon() + "," + order.getStartLat(), 1).get("distance").toString());
- // Double dis2 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat(), 1).get("distance").toString());
- // TODO: 2023/11/4 已改成计算直线距离
- Double dis1 = geodesyUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), order.getStartLon() + "," + order.getStartLat()).get("WGS84");
- Double dis2 = geodesyUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat()).get("WGS84");
- //判断距离
- if (dis1 <= jsonObject.getInteger("num1") * 1000 && dis2 <= jsonObject.getInteger("num2") * 1000) {
- orderPrivateCar1 = order;
- break;
- }
- }
- }
+ if (orderPrivateCar.getState() != 7) {
+ for (int i = 0; i < jsonArray.size(); i++) {
+ JSONObject jsonObject1 = jsonArray.getJSONObject(i);
+ Integer serverCarModelId = jsonObject1.getInteger("serverCarModelId");
+ Integer rideType = jsonObject1.getInteger("rideType");
+ if (0 == serverCarModelId) {
+ OrderTaxi orderTaxi = new OrderTaxi();
+ orderTaxi.setId(orderPrivateCar.getId());
+ orderTaxi.setState(1);
+ orderTaxi.setUserId(orderPrivateCar.getUserId());
+ orderTaxi.setStartLon(orderPrivateCar.getStartLon());
+ orderTaxi.setStartLat(orderPrivateCar.getStartLat());
+ orderTaxiService.pushOrder(orderTaxi, 3);
}
- if (orderPrivateCar1 == null) {
- orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType", 3).eq("state", 5).le("totalPeopleNum", 4 - peopleNum));
+
+ if (rideType != 3) {
+ //推单操作-独享
+ this.pushOrder(orderPrivateCar.getId(), rideType, serverCarModelId, orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat());
+ } else {
+ OrderPrivateCar orderPrivateCar1 = null;
+ OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
+ TbSpellOrderRule spellOrderRule = spellOrderRuleService.selectOne(new EntityWrapper<TbSpellOrderRule>().eq("openCityId", openCity.getId()));
+ //判断是否有相同线路的拼车-有直接拼成功,或者推送拼车订单
+ List<OrderPrivateCar> orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType", 3).in("state", "2,3,4").le("totalPeopleNum", 4 - peopleNum));
for (OrderPrivateCar order : orderList) {
if (spellOrderRule != null) {
JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent());
//判断时间
if (travelTime.getTime() >= order.getTravelTime().getTime() - jsonObject.getInteger("num5") * 60000L && travelTime.getTime() <= order.getTravelTime().getTime() + jsonObject.getInteger("num6") * 60000L) {
- String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(order.getDriverId()));
- // Double dis1 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value, 1).get("distance").toString());
- // Double dis2 = Double.valueOf(gdMapElectricFenceUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat(), 1).get("distance").toString());
-
- // TODO: 2023/11/4 已改成计算直线距离
- Double dis1 = geodesyUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value).get("WGS84");
+ Double dis1 = geodesyUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), order.getStartLon() + "," + order.getStartLat()).get("WGS84");
Double dis2 = geodesyUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat()).get("WGS84");
- //判断距离
- if (dis1 <= jsonObject.getInteger("num3") * 1000 && dis2 <= jsonObject.getInteger("num4") * 1000) {
+ if (dis1 <= jsonObject.getInteger("num1") * 1000 && dis2 <= jsonObject.getInteger("num2") * 1000) {
orderPrivateCar1 = order;
break;
}
}
}
}
- }
- if (orderPrivateCar1 == null) {
- this.pushOrder(orderPrivateCar.getId(), rideType, serverCarModelId, orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat());
- } else {
- Driver driver = driverService.selectById(orderPrivateCar1.getDriverId());
- orderPrivateCar.setDriverId(driverId);
- orderPrivateCar.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : (
- driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1));
- orderPrivateCar.setState(2);
- orderPrivateCar.setDriverId(driver.getId());
- orderPrivateCar.setCarId(driver.getCarId());
- CarService query1 = carServiceMapper.query(1, driver.getCarId());
- orderPrivateCar.setServerCarModelId(query1.getServerCarModelId());
- orderPrivateCar.setRideType(3);
- orderPrivateCar.setSnatchOrderTime(new Date());
- orderPrivateCar.setTotalPeopleNum(peopleNum + orderPrivateCar1.getTotalPeopleNum());
- orderPrivateCar.setIsReassign(1);
- orderPrivateCar.setIsDelete(1);
- orderPrivateCar.setPid(orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid());
-
- Integer promotion1 = isPromotion(orderPrivateCar.getUserId(), driver.getPlaceOfEmployment());
- if(promotion1!=null){
- orderPrivateCar.setPromotion(2);
- Driver driver1 = driverService.selectById(promotion1);
- orderPrivateCar.setPromotionUser(driver1.getName());
- orderPrivateCar.setPromotionPhone(driver1.getPhone());
- orderPrivateCar.setPromotionDriverId(promotion1);
- }
-
- //修改总订单人数
- OrderPrivateCar orderPrivateCar2 = new OrderPrivateCar();
- orderPrivateCar2.setSpellSuccess(1);
- orderPrivateCar2.setTotalPeopleNum(peopleNum + orderPrivateCar1.getTotalPeopleNum());
- this.update(orderPrivateCar2, new EntityWrapper<OrderPrivateCar>().eq("pid", orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid()).lt("state", 6));
- this.update(orderPrivateCar2, new EntityWrapper<OrderPrivateCar>().eq("id", orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid()).lt("state", 6));
- //
- //调用移动的小号接口
-// Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), (System.currentTimeMillis() + 86400000));
-// if (String.valueOf(map.get("code")).equals("200")) {
-// orderPrivateCar.setTelX(map.get("telX"));
-// orderPrivateCar.setBindId(map.get("bindId"));
-// }
- new Thread(new Runnable() {
- @Override
- public void run() {
- pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0);
- pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 100, 0);
- pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1);
-
+ if (orderPrivateCar1 == null) {
+ orderList = orderPrivateCarMapper.selectList(new EntityWrapper<OrderPrivateCar>().eq("rideType", 3).eq("state", 5).le("totalPeopleNum", 4 - peopleNum));
+ for (OrderPrivateCar order : orderList) {
+ if (spellOrderRule != null) {
+ JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent());
+ if (travelTime.getTime() >= order.getTravelTime().getTime() - jsonObject.getInteger("num5") * 60000L && travelTime.getTime() <= order.getTravelTime().getTime() + jsonObject.getInteger("num6") * 60000L) {
+ String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(order.getDriverId()));
+ Double dis1 = geodesyUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), value).get("WGS84");
+ Double dis2 = geodesyUtil.getDistance(orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), order.getEndLon() + "," + order.getEndLat()).get("WGS84");
+ if (dis1 <= jsonObject.getInteger("num3") * 1000 && dis2 <= jsonObject.getInteger("num4") * 1000) {
+ orderPrivateCar1 = order;
+ break;
+ }
+ }
+ }
}
- }).start();
- List<OrderPrivateCar> orderList1 = this.selectList(new EntityWrapper<OrderPrivateCar>().eq("pid", orderPrivateCar.getPid()));
- for (OrderPrivateCar orderPrivateCar3 : orderList1) {
+ }
+ if (orderPrivateCar1 == null) {
+ this.pushOrder(orderPrivateCar.getId(), rideType, serverCarModelId, orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat());
+ } else {
+ Driver driver = driverService.selectById(orderPrivateCar1.getDriverId());
+ orderPrivateCar.setDriverId(driverId);
+ orderPrivateCar.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : (
+ driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1));
+ orderPrivateCar.setState(2);
+ orderPrivateCar.setDriverId(driver.getId());
+ orderPrivateCar.setCarId(driver.getCarId());
+ CarService query1 = carServiceMapper.query(1, driver.getCarId());
+ orderPrivateCar.setServerCarModelId(query1.getServerCarModelId());
+ orderPrivateCar.setRideType(3);
+ orderPrivateCar.setSnatchOrderTime(new Date());
+ orderPrivateCar.setTotalPeopleNum(peopleNum + orderPrivateCar1.getTotalPeopleNum());
+ orderPrivateCar.setIsReassign(1);
+ orderPrivateCar.setIsDelete(1);
+ orderPrivateCar.setPid(orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid());
+
+ Integer promotion1 = isPromotion(orderPrivateCar.getUserId(), driver.getPlaceOfEmployment());
+ if(promotion1!=null){
+ orderPrivateCar.setPromotion(2);
+ Driver driver1 = driverService.selectById(promotion1);
+ orderPrivateCar.setPromotionUser(driver1.getName());
+ orderPrivateCar.setPromotionPhone(driver1.getPhone());
+ orderPrivateCar.setPromotionDriverId(promotion1);
+ }
+
+ OrderPrivateCar orderPrivateCar2 = new OrderPrivateCar();
+ orderPrivateCar2.setSpellSuccess(1);
+ orderPrivateCar2.setTotalPeopleNum(peopleNum + orderPrivateCar1.getTotalPeopleNum());
+ this.update(orderPrivateCar2, new EntityWrapper<OrderPrivateCar>().eq("pid", orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid()).lt("state", 6));
+ this.update(orderPrivateCar2, new EntityWrapper<OrderPrivateCar>().eq("id", orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid()).lt("state", 6));
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0);
+ pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 100, 0);
+ pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1);
+
+ }
+ }).start();
+ List<OrderPrivateCar> orderList1 = this.selectList(new EntityWrapper<OrderPrivateCar>().eq("pid", orderPrivateCar.getPid()));
+ for (OrderPrivateCar orderPrivateCar3 : orderList1) {
+ pushUtil.pushOrderState(1, orderPrivateCar3.getUserId(), orderPrivateCar3.getId(), 1, 13, 0);
+ }
+ OrderPrivateCar orderPrivateCar3 = this.selectById(orderPrivateCar.getPid());
pushUtil.pushOrderState(1, orderPrivateCar3.getUserId(), orderPrivateCar3.getId(), 1, 13, 0);
}
- OrderPrivateCar orderPrivateCar3 = this.selectById(orderPrivateCar.getPid());
- pushUtil.pushOrderState(1, orderPrivateCar3.getUserId(), orderPrivateCar3.getId(), 1, 13, 0);
}
}
}
//添加消息
- systemNoticeService.addSystemNotice(1, "您的快车订单已下单成功,我们正在为您指派司机,请稍后!", orderPrivateCar.getUserId(), 1);
+ if (orderPrivateCar.getState() == 7) {
+ systemNoticeService.addSystemNotice(1, "您的快车订单已生成,请先完成支付。", orderPrivateCar.getUserId(), 1);
+ } else {
+ systemNoticeService.addSystemNotice(1, "您的快车订单已下单成功,我们正在为您指派司机,请稍后!", orderPrivateCar.getUserId(), 1);
+ }
baseWarpper.setId(orderPrivateCar.getId());
} catch (Exception e) {
e.printStackTrace();
@@ -840,6 +883,45 @@
return ResultUtil.error("系统繁忙,请稍后再试!");
}
return ResultUtil.success(baseWarpper);
+ }
+
+ private Double getBatchEstimateAmount(String serverCarModel, List<ServerCarModelWarpper> priceList) {
+ if (ToolUtil.isEmpty(serverCarModel) || priceList == null || priceList.isEmpty()) {
+ return null;
+ }
+ JSONArray jsonArray = JSON.parseArray(serverCarModel);
+ Double minEstimateAmount = null;
+ for (int i = 0; i < jsonArray.size(); i++) {
+ JSONObject jsonObject = jsonArray.getJSONObject(i);
+ Integer serverCarModelId = jsonObject.getInteger("serverCarModelId");
+ Integer rideType = jsonObject.getInteger("rideType");
+ if (serverCarModelId == null || serverCarModelId == 0) {
+ continue;
+ }
+ ServerCarModelWarpper matched = priceList.stream()
+ .filter(item -> item.getId() != null && item.getId().equals(serverCarModelId))
+ .findFirst()
+ .orElse(null);
+ if (matched == null) {
+ continue;
+ }
+ Map<String, Object> amountMap;
+ if (Integer.valueOf(2).equals(rideType)) {
+ amountMap = matched.getBuyNowAmount();
+ } else if (Integer.valueOf(3).equals(rideType)) {
+ amountMap = matched.getPutTogetherOneAmount();
+ } else {
+ amountMap = matched.getAmount();
+ }
+ if (amountMap == null || amountMap.get("zongfeiyong") == null) {
+ continue;
+ }
+ Double estimateAmount = Double.valueOf(amountMap.get("zongfeiyong").toString());
+ if (minEstimateAmount == null || estimateAmount < minEstimateAmount) {
+ minEstimateAmount = estimateAmount;
+ }
+ }
+ return minEstimateAmount;
}
@@ -1050,8 +1132,11 @@
// if(orderPrivateCar.getState() == 4){
// return ResultUtil.error("司机已到达预约点,取消会产生一定的费用");
// }
- if (orderPrivateCar.getState() >= 5 && orderPrivateCar.getState() != 11) {
+ if (orderPrivateCar.getState() >= 5 && orderPrivateCar.getState() != 11 && orderPrivateCar.getCancelType() ==2) {
return ResultUtil.error("订单已取消,请刷新页面");
+ }
+ if (!Integer.valueOf(2).equals(orderPrivateCar.getPaymentMode())) {
+ handlePrivateCarPrepayCancelRefund(orderPrivateCar,reason);
}
Integer number1 = this.selectCount(new EntityWrapper<OrderPrivateCar>().eq("pid", orderPrivateCar.getPid() == null ? orderPrivateCar.getId() : orderPrivateCar.getPid()).lt("state", 6));
Integer number2 = this.selectCount(new EntityWrapper<OrderPrivateCar>().eq("id", orderPrivateCar.getPid() == null ? orderPrivateCar.getId() : orderPrivateCar.getPid()).lt("state", 6));
@@ -1179,9 +1264,14 @@
if (payType == 1) {//微信支付
orderCancel.setPayType(1);
orderCancelService.updateById(orderCancel);
- String app = type == 1 ? "APP" : "JSAPI";
- resultUtil = payMoneyUtil.weixinpay("订单取消", "", id + "_1_" + UUIDUtil.getRandomCode(5), query.getMoney().toString(), "/base/wxCancelOrderTaxi", app, userInfo.getAppletsOpenId());
- paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, id, 1, 1, query.getMoney(), "", 1);//添加预支付数据
+ String outTradeNo = "CANCEL_" + id + "_1_" + UUIDUtil.getRandomCode(5);
+ JSONObject response = cbyzxOrderPayHelper.createOrder(orderPrivateCar.getUserId(), userInfo.getAppletsOpenId(), outTradeNo, query.getMoney());
+ if (!cbyzxOrderPayHelper.isCreateSuccess(response)) {
+ return ResultUtil.error(cbyzxOrderPayHelper.extractMessage(response), response);
+ }
+ String paymentCode = ToolUtil.isNotEmpty(cbyzxOrderPayHelper.extractRecordCode(response)) ? cbyzxOrderPayHelper.extractRecordCode(response) : outTradeNo;
+ resultUtil = ResultUtil.success(response);
+ paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, id, 1, 1, query.getMoney(), paymentCode, 1);//添加预支付数据
}
if (payType == 2) {//支付宝支付
orderCancel.setPayType(2);
@@ -1270,6 +1360,7 @@
String driverId = (String) redisTemplate.opsForValue().get("DEVICE_" + map.get("driverId"));
map.put("device", ToolUtil.isNotEmpty(driverId) ? 2 : 1);
map.put("orderType", 1);
+ fillPrivateCarPrepayDisplayMoney(this.selectById(orderId), map);
return map;
}
@@ -1881,6 +1972,9 @@
if (orderPrivateCar.getState() != 7) {
return ResultUtil.error("订单不在待支付状态,不允许支付", "");
}
+ if (Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) && Integer.valueOf(4).equals(orderPrivateCar.getPrepayStage())) {
+ return ResultUtil.error("订单退款处理中,请等待退款完成", "");
+ }
Integer uid = orderPrivateCar.getUserId();
Double orderMoney = (2 == orderPrivateCar.getAbnormal() && 2 == orderPrivateCar.getAbnormalStatus() ? orderPrivateCar.getResponsibilityMoney().doubleValue() : orderPrivateCar.getOrderMoney());
UserInfo userInfo = userInfoService.selectById(uid);
@@ -1934,14 +2028,25 @@
}
}
orderMoney = orderMoney < 0 ? 0 : orderMoney;
+ ResultUtil prepaySettleResult = settlePrivateCarPrepayIfNoSecondPay(orderPrivateCar, userInfo, orderMoney);
+ if (prepaySettleResult != null) {
+ return prepaySettleResult;
+ }
+ orderMoney = getPrivateCarPrepayFinalPayAmount(orderPrivateCar, orderMoney);
if (payType == 1) {//微信支付
- String app = type == 1 ? "APP" : "JSAPI";
- resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId());
- paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, "", 1);//添加预支付数据
+ String outTradeNo = orderId + "_1_" + UUIDUtil.getRandomCode(5);
+ JSONObject response = cbyzxOrderPayHelper.createOrder(orderPrivateCar.getUserId(), userInfo.getAppletsOpenId(), outTradeNo, orderMoney);
+ if (!cbyzxOrderPayHelper.isCreateSuccess(response)) {
+ return ResultUtil.error(cbyzxOrderPayHelper.extractMessage(response), response);
+ }
+ String paymentCode = ToolUtil.isNotEmpty(cbyzxOrderPayHelper.extractRecordCode(response)) ? cbyzxOrderPayHelper.extractRecordCode(response) : outTradeNo;
+ resultUtil = ResultUtil.success(response);
+ paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, paymentCode, 1);//添加预支付数据
}
if (payType == 2) {//支付宝支付
- resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi");
- paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, "", 1);//添加预支付数据
+ String outTradeNo = orderId + "_1_" + UUIDUtil.getRandomCode(5);
+ resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", outTradeNo, orderMoney.toString(), "/base/aliPayOrderTaxi");
+ paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, outTradeNo, 1);//添加预支付数据
}
if (payType == 3) {//余额支付
if (userInfo.getBalance() == null || userInfo.getBalance() < orderMoney) {
@@ -1950,29 +2055,32 @@
userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+ boolean isPrepayFirstStage = isPrivateCarPrepayFirstStage(orderPrivateCar);
+ boolean isPrepaySpreadStage = isPrivateCarPrepaySpreadStage(orderPrivateCar);
+ if (isPrepayFirstStage) {
+ handlePrivateCarPrepayFirstPaid(orderPrivateCar, userInfo, orderMoney, 3);
+ return resultUtil;
+ }
+
OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
SysIntegral query1 = sysIntegralMapper.query(openCity.getId());
userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分
-
+
//添加交易明细
transactionDetailsService.saveData(uid, "快车订单", orderMoney, 2, 1, 1, 1, orderId);
userInfoService.updateById(userInfo);
-
+
orderPrivateCar.setState(8);
orderPrivateCar.setPayType(3);
- orderPrivateCar.setPayMoney(orderMoney);
+ orderPrivateCar.setPayMoney(isPrepaySpreadStage ? appendPayMoney(orderPrivateCar.getPayMoney(), orderMoney) : orderMoney);
orderPrivateCar.setPayTime(new Date());
-
- //处理优惠券和红包
- if (null != userCouponRecord) {
- userCouponRecord.setState(2);
- userCouponRecord.setEndTime(new Date());
- userCouponRecordService.updateById(userCouponRecord);
+ if (isPrepaySpreadStage) {
+ orderPrivateCar.setPrepayStage(5);
+ orderPrivateCar.setPrepaySecondPayNo(buildBalancePayNo(1, orderId));
}
- if (null != query) {
- query.setState(2);
- query.setEndTime(new Date());
- userRedPacketRecordService.updateById(query);
+
+ if (!isPrepaySpreadStage) {
+ consumePrivateCarBenefits(orderPrivateCar);
}
//非追缴单才需要添加收入
if(0 == orderPrivateCar.getRecoveryOrder()){
@@ -2016,6 +2124,9 @@
}
if (orderPrivateCar.getState() != 7) {
return ResultUtil.error("订单不在待支付状态,不允许支付", new ArrayList<>());
+ }
+ if (Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) && Integer.valueOf(4).equals(orderPrivateCar.getPrepayStage())) {
+ return ResultUtil.error("订单退款处理中,请等待退款完成", new ArrayList<>());
}
Integer uid = orderPrivateCar.getUserId();
@@ -2182,14 +2293,26 @@
orderMoney = new BigDecimal(orderMoney).setScale(2, RoundingMode.HALF_UP).doubleValue();
System.out.println("!!!" + orderMoney + "!!!!");
orderMoney = orderMoney < 0 ? 0 : orderMoney;
- orderPrivateCar.setPayMoney(orderMoney);
+ ResultUtil prepaySettleResult = settlePrivateCarPrepayIfNoSecondPay(orderPrivateCar, userInfo, orderMoney);
+ if (prepaySettleResult != null) {
+ return prepaySettleResult;
+ }
+ orderMoney = getPrivateCarPrepayFinalPayAmount(orderPrivateCar, orderMoney);
+ if (!isPrivateCarPrepaySpreadStage(orderPrivateCar)) {
+ orderPrivateCar.setPayMoney(orderMoney);
+ }
if (payType == 1) {//微信支付
if (orderMoney == 0) {
return ResultUtil.error("请使用余额支付");
}
- String app = type == 1 ? "APP" : "JSAPI";
- resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId());
- paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, "", 1);//添加预支付数据
+ String outTradeNo = orderId + "_1_" + UUIDUtil.getRandomCode(5);
+ JSONObject response = cbyzxOrderPayHelper.createOrder(orderPrivateCar.getUserId(), userInfo.getAppletsOpenId(), outTradeNo, orderMoney);
+ if (!cbyzxOrderPayHelper.isCreateSuccess(response)) {
+ return ResultUtil.error(cbyzxOrderPayHelper.extractMessage(response), response);
+ }
+ String paymentCode = ToolUtil.isNotEmpty(cbyzxOrderPayHelper.extractRecordCode(response)) ? cbyzxOrderPayHelper.extractRecordCode(response) : outTradeNo;
+ resultUtil = ResultUtil.success(response);
+ paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, paymentCode, 1);//添加预支付数据
//创建定时任务查询订单支付状态
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>());
@@ -2220,8 +2343,9 @@
if (orderMoney == 0) {
return ResultUtil.error("请使用余额支付");
}
- resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi");
- paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, "", 1);//添加预支付数据
+ String outTradeNo = orderId + "_1_" + UUIDUtil.getRandomCode(5);
+ resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", outTradeNo, orderMoney.toString(), "/base/aliPayOrderTaxi");
+ paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, outTradeNo, 1);//添加预支付数据
}
if (payType == 3) {//余额支付
if (userInfo.getBalance() == null || userInfo.getBalance() < orderMoney) {
@@ -2229,7 +2353,14 @@
}
userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
-
+
+ boolean isPrepayFirstStage = isPrivateCarPrepayFirstStage(orderPrivateCar);
+ boolean isPrepaySpreadStage = isPrivateCarPrepaySpreadStage(orderPrivateCar);
+ if (isPrepayFirstStage) {
+ handlePrivateCarPrepayFirstPaid(orderPrivateCar, userInfo, orderMoney, 3);
+ return resultUtil;
+ }
+
OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
SysIntegral query1 = sysIntegralMapper.query(openCity.getId());
if (null != query1) {
@@ -2242,22 +2373,15 @@
orderPrivateCar.setState(8);
orderPrivateCar.setPayType(3);
+ orderPrivateCar.setPayMoney(isPrepaySpreadStage ? appendPayMoney(orderPrivateCar.getPayMoney(), orderMoney) : orderMoney);
orderPrivateCar.setPayTime(new Date());
-
- //处理优惠券和红包
- if (null != userCouponRecord) {
- userCouponRecord.setState(2);
- userCouponRecord.setEndTime(new Date());
- userCouponRecordService.updateById(userCouponRecord);
+ if (isPrepaySpreadStage) {
+ orderPrivateCar.setPrepayStage(5);
+ orderPrivateCar.setPrepaySecondPayNo(buildBalancePayNo(1, orderId));
}
- //处理打车卡
- if (null != userTaxiCard) {
- userTaxiCardService.updateById(userTaxiCard);
- }
- if (null != query) {
- query.setState(2);
- query.setEndTime(new Date());
- userRedPacketRecordService.updateById(query);
+
+ if (!isPrepaySpreadStage) {
+ consumePrivateCarBenefits(orderPrivateCar);
}
//非追缴单才添加收入记录
if(0 == orderPrivateCar.getRecoveryOrder()){
@@ -2448,54 +2572,551 @@
System.err.println("预支付数据异常(orderId = " + id + ")");
}
}
+
+ private boolean isPrivateCarPrepayFirstStage(OrderPrivateCar orderPrivateCar) {
+ return orderPrivateCar != null
+ && Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode())
+ && Integer.valueOf(1).equals(orderPrivateCar.getPrepayStage());
+ }
+
+ private boolean isPrivateCarPrepaySpreadStage(OrderPrivateCar orderPrivateCar) {
+ return orderPrivateCar != null
+ && Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode())
+ && Integer.valueOf(3).equals(orderPrivateCar.getPrepayStage());
+ }
+
+ private String buildBalancePayNo(Integer orderType, Integer orderId) {
+ return "BAL_" + orderType + "_" + orderId + "_" + System.currentTimeMillis();
+ }
+
+ private Double appendPayMoney(Double source, Double amount) {
+ return new BigDecimal(source == null ? 0D : source)
+ .add(new BigDecimal(amount == null ? 0D : amount))
+ .setScale(2, BigDecimal.ROUND_HALF_EVEN)
+ .doubleValue();
+ }
+
+ private boolean isPrivateCarPrepayFinalStage(OrderPrivateCar orderPrivateCar) {
+ return orderPrivateCar != null
+ && Integer.valueOf(7).equals(orderPrivateCar.getState());
+ }
+
+ private BigDecimal toMoney(Double amount) {
+ return new BigDecimal(String.valueOf(amount == null ? 0D : amount)).setScale(2, RoundingMode.HALF_UP);
+ }
+
+ private PaymentRecord getPrivateCarPrepayPaidRecord(OrderPrivateCar orderPrivateCar) throws Exception {
+ PaymentRecord paymentRecord = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, orderPrivateCar.getId(), 1, orderPrivateCar.getPayType(), 2);
+ if (paymentRecord == null) {
+ paymentRecord = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, orderPrivateCar.getId(), 1, null, 2);
+ }
+ if (paymentRecord == null) {
+ paymentRecord = paymentRecordService.query(1, null, null, orderPrivateCar.getId(), 1, null, 2);
+ }
+ if (paymentRecord != null && orderPrivateCar.getPayType() == null) {
+ orderPrivateCar.setPayType(paymentRecord.getPayType());
+ }
+ return paymentRecord;
+ }
+
+ private BigDecimal getPrivateCarPrepayPaidAmount(OrderPrivateCar orderPrivateCar) throws Exception {
+ PaymentRecord paymentRecord = getPrivateCarPrepayPaidRecord(orderPrivateCar);
+ if (paymentRecord != null && paymentRecord.getAmount() != null && paymentRecord.getAmount() > 0) {
+ return toMoney(paymentRecord.getAmount());
+ }
+ if ((Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) || (orderPrivateCar.getPrepayStage() != null && orderPrivateCar.getPrepayStage() > 0))
+ && orderPrivateCar.getPayMoney() != null && orderPrivateCar.getPayMoney() > 0) {
+ return toMoney(orderPrivateCar.getPayMoney());
+ }
+ return BigDecimal.ZERO.setScale(2, RoundingMode.HALF_UP);
+ }
+
+ private Double getPrivateCarPrepayFinalPayAmount(OrderPrivateCar orderPrivateCar, Double finalAmount) throws Exception {
+ if (!isPrivateCarPrepayFinalStage(orderPrivateCar)) {
+ return toMoney(finalAmount).doubleValue();
+ }
+ BigDecimal paidAmount = getPrivateCarPrepayPaidAmount(orderPrivateCar);
+ if (paidAmount.compareTo(BigDecimal.ZERO) <= 0) {
+ return toMoney(finalAmount).doubleValue();
+ }
+ BigDecimal spreadAmount = toMoney(finalAmount).subtract(paidAmount).setScale(2, RoundingMode.HALF_UP);
+ if (spreadAmount.compareTo(BigDecimal.ZERO) > 0) {
+ orderPrivateCar.setPrepayStage(3);
+ return spreadAmount.doubleValue();
+ }
+ return 0D;
+ }
+
+ private Double getPrivateCarPrepayDisplayPayAmount(OrderPrivateCar orderPrivateCar, Double finalAmount) {
+ if (!isPrivateCarPrepayFinalStage(orderPrivateCar)) {
+ return toMoney(finalAmount).doubleValue();
+ }
+ try {
+ BigDecimal paidAmount = getPrivateCarPrepayPaidAmount(orderPrivateCar);
+ if (paidAmount.compareTo(BigDecimal.ZERO) <= 0) {
+ return toMoney(finalAmount).doubleValue();
+ }
+ BigDecimal displayAmount = toMoney(finalAmount).subtract(paidAmount).setScale(2, RoundingMode.HALF_UP);
+ return displayAmount.compareTo(BigDecimal.ZERO) > 0 ? displayAmount.doubleValue() : 0D;
+ } catch (Exception e) {
+ e.printStackTrace();
+ return toMoney(finalAmount).doubleValue();
+ }
+ }
+
+ private void fillPrivateCarPrepayDisplayMoney(OrderPrivateCar orderPrivateCar, Map<String, Object> map) {
+ if (map == null || orderPrivateCar == null || !isPrivateCarPrepayFinalStage(orderPrivateCar)) {
+ return;
+ }
+ Double finalAmount = null != map.get("orderMoney") ? Double.valueOf(String.valueOf(map.get("orderMoney"))) : orderPrivateCar.getOrderMoney();
+ Double displayAmount = getPrivateCarPrepayDisplayPayAmount(orderPrivateCar, finalAmount);
+ map.put("orderMoney", displayAmount);
+ map.put("payMoney", displayAmount);
+ }
+
+ private ResultUtil settlePrivateCarPrepayIfNoSecondPay(OrderPrivateCar orderPrivateCar, UserInfo userInfo, Double finalAmount) throws Exception {
+ if (!isPrivateCarPrepayFinalStage(orderPrivateCar)) {
+ return null;
+ }
+ BigDecimal paidAmount = getPrivateCarPrepayPaidAmount(orderPrivateCar);
+ if (paidAmount.compareTo(BigDecimal.ZERO) <= 0) {
+ return null;
+ }
+ BigDecimal settleAmount = toMoney(finalAmount);
+ BigDecimal refundAmount = paidAmount.subtract(settleAmount).setScale(2, RoundingMode.HALF_UP);
+ if (refundAmount.compareTo(BigDecimal.ZERO) < 0) {
+ return null;
+ }
+ if (refundAmount.compareTo(BigDecimal.ZERO) > 0) {
+ ResultUtil refundResult = refundPrivateCarPrepayDifference(orderPrivateCar, userInfo, refundAmount.doubleValue());
+ if (!ResultUtil.SUCCESS.equals(refundResult.getCode())) {
+ return refundResult;
+ }
+ }
+ finishPrivateCarPrepayOrder(orderPrivateCar, settleAmount.doubleValue());
+ return ResultUtil.success();
+ }
+
+ private ResultUtil refundPrivateCarPrepayDifference(OrderPrivateCar orderPrivateCar, UserInfo userInfo, Double refundAmount) throws Exception {
+ if (Integer.valueOf(3).equals(orderPrivateCar.getPayType())) {
+ userInfo.setBalance(new BigDecimal(null != userInfo.getBalance() ? userInfo.getBalance() : 0D)
+ .add(toMoney(refundAmount)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+ userInfoService.updateById(userInfo);
+ orderPrivateCar.setPrepayRefundNo("BALANCE_REFUND_1_" + orderPrivateCar.getId() + "_" + ToolUtil.getRandomString(5));
+ orderPrivateCar.setPrepayRefundAmount(refundAmount);
+ orderPrivateCar.setPrepayRefundTime(new Date());
+ transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车先付订单退款", refundAmount, 1, 1, 1, 1, orderPrivateCar.getId());
+ return ResultUtil.success();
+ }
+
+ PaymentRecord paymentRecord = getPrivateCarPrepayPaidRecord(orderPrivateCar);
+ if (paymentRecord == null) {
+ return ResultUtil.error("先付订单缺少已支付流水,无法退款");
+ }
+ if (Integer.valueOf(1).equals(orderPrivateCar.getPayType())) {
+ CbyzxPayUtil.ClosePayOrderRequest request = new CbyzxPayUtil.ClosePayOrderRequest();
+ request.setOutRequestNo(ToolUtil.isNotEmpty(orderPrivateCar.getPrepaySecondPayNo()) ? orderPrivateCar.getPrepaySecondPayNo() : paymentRecord.getCode());
+ request.setRefundOutRequestNo("PREPAY_DIFF_REFUND_1_" + orderPrivateCar.getId() + ToolUtil.getRandomString(5));
+ request.setRefundAmount(toFen(refundAmount));
+ request.setRefundDesc("快车先付订单多退少补退款");
+ JSONObject response = CbyzxPayUtil.closePayOrder(request);
+ if (!isPrivateCarPrepayRefundSuccess(response)) {
+ return ResultUtil.error(extractPrivateCarRefundMessage(response), response);
+ }
+ orderPrivateCar.setPrepayRefundNo(extractPrivateCarRefundNo(response));
+ orderPrivateCar.setPrepayRefundAmount(refundAmount);
+ orderPrivateCar.setPrepayRefundTime(new Date());
+ transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车先付订单退款", refundAmount, 1, 1, 1, 1, orderPrivateCar.getId());
+ return ResultUtil.success(response);
+ }
+ if (Integer.valueOf(2).equals(orderPrivateCar.getPayType())) {
+ Map<String, String> map = payMoneyUtil.aliRefund(paymentRecord.getCode(), refundAmount.toString());
+ if (!"10000".equals(map.get("code"))) {
+ return ResultUtil.error(map.get("msg"));
+ }
+ orderPrivateCar.setPrepayRefundNo(map.get("trade_no"));
+ orderPrivateCar.setPrepayRefundAmount(refundAmount);
+ orderPrivateCar.setPrepayRefundTime(new Date());
+ transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车先付订单退款", refundAmount, 1, 1, 1, 1, orderPrivateCar.getId());
+ return ResultUtil.success(map);
+ }
+ return ResultUtil.error("先付订单支付方式不支持退款");
+ }
+
+ private void finishPrivateCarPrepayOrder(OrderPrivateCar orderPrivateCar, Double settleAmount) throws Exception {
+ orderPrivateCar.setState(8);
+ orderPrivateCar.setPayMoney(settleAmount);
+ orderPrivateCar.setPayTime(new Date());
+ orderPrivateCar.setPrepayStage(5);
+ if (orderPrivateCar.getRecoveryOrder() != null && 0 == orderPrivateCar.getRecoveryOrder()) {
+ Double incomeAmount = (2 == orderPrivateCar.getAbnormal() && 2 == orderPrivateCar.getAbnormalStatus()
+ ? orderPrivateCar.getResponsibilityMoney().doubleValue() : orderPrivateCar.getOrderMoney());
+ Map<String, Object> map = incomeService.saveIncome(orderPrivateCar.getId(), 1, incomeAmount);
+ orderPrivateCar.setSplitAllocation(JSON.toJSONString(map));
+ }
+ this.updateAllColumnById(orderPrivateCar);
+ promotion(orderPrivateCar.getId());
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
+ pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
+ }
+ }).start();
+ systemNoticeService.addSystemNotice(1, "您的快车先付订单已完成结算,请注意查收。", orderPrivateCar.getUserId(), 1);
+ }
+
+ private void consumePrivateCarBenefits(OrderPrivateCar orderPrivateCar) throws Exception {
+ if (null != orderPrivateCar.getCouponId()) {
+ UserCouponRecord userCouponRecord = userCouponRecordService.selectById(orderPrivateCar.getCouponId());
+ if (userCouponRecord != null) {
+ userCouponRecord.setState(2);
+ userCouponRecord.setEndTime(new Date());
+ userCouponRecordService.updateById(userCouponRecord);
+ }
+ }
+ if (null != orderPrivateCar.getUserTaxiCardId()) {
+ UserTaxiCard userTaxiCard = userTaxiCardService.selectById(orderPrivateCar.getUserTaxiCardId());
+ if (userTaxiCard != null && (userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3)) {
+ JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent());
+ jsonObject.put("time", jsonObject.getInteger("time") - 1);
+ userTaxiCard.setContent(jsonObject.toJSONString());
+ userTaxiCardService.updateById(userTaxiCard);
+ }
+ }
+ if (null != orderPrivateCar.getRedPacketId()) {
+ UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(orderPrivateCar.getRedPacketId());
+ if (userRedPacketRecord != null) {
+ userRedPacketRecord.setState(2);
+ userRedPacketRecord.setEndTime(new Date());
+ userRedPacketRecordService.updateById(userRedPacketRecord);
+ }
+ }
+ }
+
+ private void restorePrivateCarBenefits(OrderPrivateCar orderPrivateCar) throws Exception {
+ if (null != orderPrivateCar.getCouponId()) {
+ UserCouponRecord userCouponRecord = userCouponRecordService.selectById(orderPrivateCar.getCouponId());
+ if (userCouponRecord != null) {
+ userCouponRecord.setState(1);
+ userCouponRecord.setEndTime(null);
+ userCouponRecordService.updateById(userCouponRecord);
+ }
+ }
+ if (null != orderPrivateCar.getUserTaxiCardId()) {
+ UserTaxiCard userTaxiCard = userTaxiCardService.selectById(orderPrivateCar.getUserTaxiCardId());
+ if (userTaxiCard != null && (userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3)) {
+ JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent());
+ Integer time = jsonObject.getInteger("time");
+ jsonObject.put("time", (time == null ? 0 : time) + 1);
+ userTaxiCard.setContent(jsonObject.toJSONString());
+ userTaxiCardService.updateById(userTaxiCard);
+ }
+ }
+ if (null != orderPrivateCar.getRedPacketId()) {
+ UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(orderPrivateCar.getRedPacketId());
+ if (userRedPacketRecord != null) {
+ userRedPacketRecord.setState(1);
+ userRedPacketRecord.setEndTime(null);
+ userRedPacketRecordService.updateById(userRedPacketRecord);
+ }
+ }
+ }
+
+ private boolean isPrivateCarPrepayRefundSuccess(JSONObject response) {
+ if (response == null) {
+ return false;
+ }
+ Object code = response.get("code");
+ if (code == null || !"0".equals(String.valueOf(code))) {
+ return false;
+ }
+ JSONObject data = response.getJSONObject("data");
+ return data != null && Boolean.TRUE.equals(data.getBoolean("isSuccess"));
+ }
+
+ private String extractPrivateCarRefundNo(JSONObject response) {
+ if (response == null) {
+ return null;
+ }
+ JSONObject data = response.getJSONObject("data");
+ if (data == null) {
+ return null;
+ }
+ String refundNo = data.getString("merchantRefundSerialNo");
+ if (ToolUtil.isNotEmpty(refundNo)) {
+ return refundNo;
+ }
+ refundNo = data.getString("refundId");
+ if (ToolUtil.isNotEmpty(refundNo)) {
+ return refundNo;
+ }
+ return data.getString("gatewaySerialNo");
+ }
+
+ private String extractPrivateCarRefundMessage(JSONObject response) {
+ if (response == null) {
+ return "微信先付退款失败";
+ }
+ JSONObject data = response.getJSONObject("data");
+ if (data != null && ToolUtil.isNotEmpty(data.getString("failReason"))) {
+ return data.getString("failReason");
+ }
+ String msg = response.getString("msg");
+ return ToolUtil.isNotEmpty(msg) ? msg : "微信先付退款失败";
+ }
+
+ private Integer toFen(Double amount) {
+ return new BigDecimal(String.valueOf(amount)).multiply(new BigDecimal("100")).setScale(0, RoundingMode.HALF_UP).intValue();
+ }
+
+ private String buildPrepayRefundOutNo(Integer orderId) {
+ return "PREPAY_REFUND_1_" + orderId+ToolUtil.getRandomString(5);
+ }
+
+ private boolean isPrivateCarPrepayMode(OrderPrivateCar orderPrivateCar) {
+ return orderPrivateCar != null && Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode());
+ }
+
+ private void handlePrivateCarPrepayCancelRefund(OrderPrivateCar orderPrivateCar, String reason) throws Exception {
+ if (!isPrivateCarPrepayMode(orderPrivateCar)) {
+ return;
+ }
+ if (Integer.valueOf(3).equals(orderPrivateCar.getPayType())) {
+ Double refundAmount = orderPrivateCar.getPayMoney();
+ if (refundAmount == null || refundAmount <= 0) {
+ throw new RuntimeException("余额先付订单退款金额异常");
+ }
+ UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
+ if (userInfo == null) {
+ throw new RuntimeException("用户信息不存在,无法退款");
+ }
+ userInfo.setBalance(new BigDecimal(null != userInfo.getBalance() ? userInfo.getBalance() : 0)
+ .add(new BigDecimal(refundAmount)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+ userInfoService.updateById(userInfo);
+ restorePrivateCarBenefits(orderPrivateCar);
+ transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车取消订单退款", refundAmount, 1, 1, 1, 1, orderPrivateCar.getId());
+ orderPrivateCar.setState(10);
+ orderPrivateCar.setPrepayStage(5);
+ orderPrivateCar.setPrepayRefundNo("BALANCE_REFUND_1_" + orderPrivateCar.getId() + "_" + ToolUtil.getRandomString(5));
+ orderPrivateCar.setPrepayRefundAmount(refundAmount);
+ orderPrivateCar.setPrepayRefundTime(new Date());
+ this.updateById(orderPrivateCar);
+ systemNoticeService.addSystemNotice(1, "您的快车余额先付订单已取消,退款已退回账户余额,请注意查收。", orderPrivateCar.getUserId(), 1);
+ } else if (Integer.valueOf(1).equals(orderPrivateCar.getPayType())){
+ String outRequestNo = orderPrivateCar.getPrepaySecondPayNo();
+ if (ToolUtil.isEmpty(outRequestNo)) {
+ throw new RuntimeException("微信先付订单缺少支付单号,无法关闭支付单");
+ }
+ Double refundAmount = orderPrivateCar.getPayMoney();
+ if (refundAmount == null || refundAmount <= 0) {
+ throw new RuntimeException("微信先付订单退款金额异常");
+ }
+ CbyzxPayUtil.ClosePayOrderRequest request = new CbyzxPayUtil.ClosePayOrderRequest();
+ request.setOutRequestNo(outRequestNo);
+ request.setRefundOutRequestNo(buildPrepayRefundOutNo(orderPrivateCar.getId()));
+ request.setRefundAmount(toFen(refundAmount));
+ request.setRefundDesc(ToolUtil.isNotEmpty(reason) ? reason : "快车订单取消退款");
+ JSONObject response = CbyzxPayUtil.closePayOrder(request);
+ if (!isPrivateCarPrepayRefundSuccess(response)) {
+ throw new RuntimeException(extractPrivateCarRefundMessage(response));
+ }
+ restorePrivateCarBenefits(orderPrivateCar);
+ transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车取消订单退款", refundAmount, 1, 1, 1, 1, orderPrivateCar.getId());
+ systemNoticeService.addSystemNotice(1, "您的快车微信先付订单已取消,退款已原路退回,请注意查收。", orderPrivateCar.getUserId(), 1);
+ }
+ }
+
+ private ResultUtil handlePrivateCarPrepayCancelRefund(OrderPrivateCar orderPrivateCar, String reason, String remark, Integer uid) throws Exception {
+ System.out.println("快车退款!!!!");
+ if (!isPrivateCarPrepayMode(orderPrivateCar)) {
+ return null;
+ }
+ if (Integer.valueOf(3).equals(orderPrivateCar.getPayType())) {
+ Double refundAmount = orderPrivateCar.getPayMoney();
+ System.out.println("快车余额退款金额!!!!"+ refundAmount);
+ if (refundAmount == null || refundAmount <= 0) {
+ return ResultUtil.error("余额先付订单退款金额异常");
+ }
+ UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
+ if (userInfo == null) {
+ return ResultUtil.error("用户信息不存在,无法退款");
+ }
+ userInfo.setBalance(new BigDecimal(null != userInfo.getBalance() ? userInfo.getBalance() : 0)
+ .add(new BigDecimal(refundAmount)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue());
+ userInfoService.updateById(userInfo);
+ restorePrivateCarBenefits(orderPrivateCar);
+ transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车取消订单退款", refundAmount, 1, 1, 1, 1, orderPrivateCar.getId());
+ orderCancelService.saveData(orderPrivateCar.getId(), 1,
+ ToolUtil.isNotEmpty(reason) ? reason : "无司机接单",
+ ToolUtil.isNotEmpty(remark) ? remark : (ToolUtil.isNotEmpty(reason) ? reason : "无司机接单"),
+ 1, refundAmount, 2, 1, uid);
+ orderPrivateCar.setState(10);
+ orderPrivateCar.setPrepayStage(5);
+ orderPrivateCar.setPrepayRefundNo("BALANCE_REFUND_1_" + orderPrivateCar.getId() + "_" + ToolUtil.getRandomString(5));
+ orderPrivateCar.setPrepayRefundAmount(refundAmount);
+ orderPrivateCar.setPrepayRefundTime(new Date());
+ this.updateById(orderPrivateCar);
+ if (orderPrivateCar.getDriverId() != null) {
+ this.deleteTask(orderPrivateCar.getId());
+ pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
+ Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
+ if (driver != null) {
+ driver.setState(2);
+ driverService.updateById(driver);
+ }
+ if (orderPrivateCar.getBindId() != null) {
+ chinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId(), orderPrivateCar.getTelX(), (System.currentTimeMillis() + 600000));
+ }
+ }
+ System.out.println("余额退款通知940");
+ systemNoticeService.addSystemNotice(1, "您的快车余额先付订单已取消,退款已退回账户余额,请注意查收。", orderPrivateCar.getUserId(), 1);
+ return ResultUtil.success();
+ }
+ String outRequestNo = orderPrivateCar.getPrepaySecondPayNo();
+ if (ToolUtil.isEmpty(outRequestNo)) {
+ return ResultUtil.error("微信先付订单缺少支付单号,无法关闭支付单");
+ }
+ Double refundAmount = orderPrivateCar.getPayMoney();
+ if (refundAmount == null || refundAmount <= 0) {
+ return ResultUtil.error("微信先付订单退款金额异常");
+ }
+ CbyzxPayUtil.ClosePayOrderRequest request = new CbyzxPayUtil.ClosePayOrderRequest();
+ request.setOutRequestNo(outRequestNo);
+ request.setRefundOutRequestNo(buildPrepayRefundOutNo(orderPrivateCar.getId()));
+ request.setRefundAmount(toFen(refundAmount));
+ request.setRefundDesc(ToolUtil.isNotEmpty(reason) ? reason : "快车订单取消退款");
+ JSONObject response = CbyzxPayUtil.closePayOrder(request);
+ if (!isPrivateCarPrepayRefundSuccess(response)) {
+ return ResultUtil.error(extractPrivateCarRefundMessage(response), response);
+ }
+
+ restorePrivateCarBenefits(orderPrivateCar);
+ transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车取消订单退款", refundAmount, 1, 1, 1, 1, orderPrivateCar.getId());
+ orderCancelService.saveData(orderPrivateCar.getId(), 1,
+ ToolUtil.isNotEmpty(reason) ? reason : "无司机接单",
+ ToolUtil.isNotEmpty(remark) ? remark : (ToolUtil.isNotEmpty(reason) ? reason : "无司机接单"),
+ 1, refundAmount, 2, 1, uid);
+ orderPrivateCar.setState(10);
+ orderPrivateCar.setPrepayStage(5);
+ orderPrivateCar.setPrepayRefundNo(extractPrivateCarRefundNo(response));
+ orderPrivateCar.setPrepayRefundAmount(refundAmount);
+ orderPrivateCar.setPrepayRefundTime(new Date());
+ this.updateById(orderPrivateCar);
+ if (orderPrivateCar.getDriverId() != null) {
+ this.deleteTask(orderPrivateCar.getId());
+ pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
+ Driver driver = driverService.selectById(orderPrivateCar.getDriverId());
+ if (driver != null) {
+ driver.setState(2);
+ driverService.updateById(driver);
+ }
+ if (orderPrivateCar.getBindId() != null) {
+ chinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId(), orderPrivateCar.getTelX(), (System.currentTimeMillis() + 86400000));
+ }
+ }
+ systemNoticeService.addSystemNotice(1, "您的快车微信先付订单已取消,退款已原路退回,请注意查收。", orderPrivateCar.getUserId(), 1);
+ return ResultUtil.success(response);
+ }
+
+ private void dispatchPrepayPrivateCarOrder(OrderPrivateCar orderPrivateCar) throws Exception {
+ if (Integer.valueOf(3).equals(orderPrivateCar.getType()) && ToolUtil.isNotEmpty(orderPrivateCar.getServerCarModel())) {
+ JSONArray jsonArray = JSON.parseArray(orderPrivateCar.getServerCarModel());
+ for (int i = 0; i < jsonArray.size(); i++) {
+ JSONObject jsonObject = jsonArray.getJSONObject(i);
+ Integer serverCarModelId = jsonObject.getInteger("serverCarModelId");
+ Integer rideType = jsonObject.getInteger("rideType");
+ if (serverCarModelId != null && serverCarModelId == 0) {
+ OrderTaxi orderTaxi = new OrderTaxi();
+ orderTaxi.setId(orderPrivateCar.getId());
+ orderTaxi.setState(1);
+ orderTaxi.setUserId(orderPrivateCar.getUserId());
+ orderTaxi.setStartLon(orderPrivateCar.getStartLon());
+ orderTaxi.setStartLat(orderPrivateCar.getStartLat());
+ orderTaxiService.pushOrder(orderTaxi, 3);
+ continue;
+ }
+ OrderPrivateCar pushOrder = new OrderPrivateCar();
+ BeanUtils.copyProperties(orderPrivateCar, pushOrder);
+ pushOrder.setRideType(rideType);
+ pushOrder.setServerCarModelId(serverCarModelId);
+ this.pushOrder(pushOrder);
+ }
+ return;
+ }
+ if (Integer.valueOf(3).equals(orderPrivateCar.getRideType())) {
+ this.pushOrderPrivateCar(orderPrivateCar.getId());
+ return;
+ }
+ this.pushOrder(orderPrivateCar);
+ }
+
+ private void handlePrivateCarPrepayFirstPaid(OrderPrivateCar orderPrivateCar, UserInfo userInfo, Double payAmount, Integer payType) throws Exception {
+ OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
+ SysIntegral query1 = sysIntegralMapper.query(openCity.getId());
+ System.out.println("快车预付回调-------057,"+query1);
+ if (null != query1) {
+ userInfo.setIntegral(userInfo.getIntegral() + (payAmount.intValue() * query1.getIntegral()));
+ }
+ userInfoService.updateById(userInfo);
+
+ consumePrivateCarBenefits(orderPrivateCar);
+ transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车订单", payAmount, 2, 1, 1, 1, orderPrivateCar.getId());
+
+ orderPrivateCar.setState(1);
+ orderPrivateCar.setPayType(payType);
+ orderPrivateCar.setPayMoney(payAmount);
+ orderPrivateCar.setPayTime(new Date());
+ orderPrivateCar.setPrepayStage(2);
+ this.updateAllColumnById(orderPrivateCar);
+
+ pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0);
+ systemNoticeService.addSystemNotice(1, "您的快车订单已支付成功,我们正在为您指派司机,请稍后!", orderPrivateCar.getUserId(), 1);
+ dispatchPrepayPrivateCarOrder(orderPrivateCar);
+ }
@Override
- public void payOrderPrivateCarCallback(Integer id, String order_id, Integer type) throws Exception {
+ public void payOrderPrivateCarCallback(Integer id, String order_id, Integer type, String outTradeNo) throws Exception {
OrderPrivateCar orderPrivateCar = this.selectById(id);
- PaymentRecord query = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, Integer.valueOf(id), 1, type, 1);
+ PaymentRecord query = ToolUtil.isNotEmpty(outTradeNo) ? paymentRecordService.queryByCode(outTradeNo, 1) : null;
+ if (query == null) {
+ query = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, Integer.valueOf(id), 1, type, 1);
+ }
+ System.out.println("快车预付回调-------084,"+query);
if (null != query && query.getState() == 1) {
+ UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
+ query.setState(2);
+ query.setCode(order_id);
+ paymentRecordService.updateById(query);
+ System.out.println("快车预付回调-------090");
+ if (isPrivateCarPrepayFirstStage(orderPrivateCar)) {
+ orderPrivateCar.setPrepaySecondPayNo(outTradeNo);
+ handlePrivateCarPrepayFirstPaid(orderPrivateCar, userInfo, query.getAmount(), type);
+ return;
+ }
+
//添加交易明细
transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车订单", query.getAmount(), 2, 1, 1, 1, query.getOrderId());
orderPrivateCar.setState(8);
orderPrivateCar.setPayType(type);
- orderPrivateCar.setPayMoney(query.getAmount());
+ boolean isPrepaySpreadStage = isPrivateCarPrepaySpreadStage(orderPrivateCar);
+ orderPrivateCar.setPayMoney(isPrepaySpreadStage ? appendPayMoney(orderPrivateCar.getPayMoney(), query.getAmount()) : query.getAmount());
orderPrivateCar.setPayTime(new Date());
-
- UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
+ if (isPrepaySpreadStage) {
+ orderPrivateCar.setPrepayStage(5);
+ orderPrivateCar.setPrepaySecondPayNo(order_id);
+ }
+
OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
SysIntegral query1 = sysIntegralMapper.query(openCity.getId());
if(null != query1){
userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分
userInfoService.updateById(userInfo);
}
-
- //处理优惠券和红包
- if (null != orderPrivateCar.getCouponId()) {
- UserCouponRecord userCouponRecord = userCouponRecordService.selectById(orderPrivateCar.getCouponId());
- userCouponRecord.setState(2);
- userCouponRecord.setEndTime(new Date());
- userCouponRecordService.updateById(userCouponRecord);
+
+ if (!isPrepaySpreadStage) {
+ consumePrivateCarBenefits(orderPrivateCar);
}
- if (null != orderPrivateCar.getUserTaxiCardId()) {
- UserTaxiCard userTaxiCard = userTaxiCardService.selectById(orderPrivateCar.getUserTaxiCardId());
- if (userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3) {
- JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent());
- jsonObject.put("time", jsonObject.getInteger("time") - 1);
- userTaxiCard.setContent(jsonObject.toJSONString());
- userTaxiCardService.updateById(userTaxiCard);
- }
- }
- if (null != orderPrivateCar.getRedPacketId()) {
- UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(orderPrivateCar.getRedPacketId());
- userRedPacketRecord.setState(2);
- userRedPacketRecord.setEndTime(new Date());
- userRedPacketRecordService.updateById(userRedPacketRecord);
- }
-
-
- query.setState(2);
- query.setCode(order_id);
- paymentRecordService.updateById(query);
//非追缴单才需要记录收入
if(null != orderPrivateCar.getRecoveryOrder() && 0 == orderPrivateCar.getRecoveryOrder()){
@@ -2624,9 +3245,14 @@
OrderPrivateCar orderPrivateCar = this.selectById(orderId);
ResultUtil resultUtil = ResultUtil.success();
if (payType == 1) {//微信支付
- String app = type == 1 ? "APP" : "JSAPI";
- resultUtil = payMoneyUtil.weixinpay("感谢费", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/wxPayThankYouFee", app, userInfo.getAppletsOpenId());
- paymentRecordService.saveData(3, uid, 1, orderId, 1, 1, money, "", 1);//添加预支付数据
+ String outTradeNo = "THANK_" + orderId + "_1_" + UUIDUtil.getRandomCode(5);
+ JSONObject response = cbyzxOrderPayHelper.createOrder(orderPrivateCar.getUserId(), userInfo.getAppletsOpenId(), outTradeNo, money);
+ if (!cbyzxOrderPayHelper.isCreateSuccess(response)) {
+ return ResultUtil.error(cbyzxOrderPayHelper.extractMessage(response), response);
+ }
+ String paymentCode = ToolUtil.isNotEmpty(cbyzxOrderPayHelper.extractRecordCode(response)) ? cbyzxOrderPayHelper.extractRecordCode(response) : outTradeNo;
+ resultUtil = ResultUtil.success(response);
+ paymentRecordService.saveData(3, uid, 1, orderId, 1, 1, money, paymentCode, 1);//添加预支付数据
}
if (payType == 2) {//支付宝支付
resultUtil = payMoneyUtil.alipay("感谢费", "感谢费", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/aliPayThankYouFee");
@@ -2734,6 +3360,7 @@
vo.setDriverInfoWarpper(driverInfoWarpper);
//其余信息
BeanUtils.copyProperties(order, vo);
+ vo.setPayMoney(getPrivateCarPrepayDisplayPayAmount(order, order.getOrderMoney()));
unPayOrderVOList.add(vo);
}
@@ -2767,7 +3394,7 @@
}
int finalI = i;
PushOrder pushOrder = querys.stream().filter(s -> s.getType() == (finalI <= 3 ? finalI : 3)).findFirst().orElse(null);
- System.out.println("pushOrder:" + pushOrder);
+ System.out.println("pushOrder2:" + pushOrder);
if (orderPrivateCar.getState() > 1) {
push = true;
break;
@@ -2807,8 +3434,11 @@
break;
}
if (num == 18) {
- orderPrivateCar1.setState(10);
- orderPrivateCarMapper.updateById(orderPrivateCar1);
+ ResultUtil refundResult = handlePrivateCarPrepayCancelRefund(orderPrivateCar1, "无司机接单", "无司机接单", orderPrivateCar1.getUserId());
+ if (refundResult == null) {
+ orderPrivateCar1.setState(10);
+ orderPrivateCarMapper.updateById(orderPrivateCar1);
+ }
pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 1);
orderIds.remove(orderPrivateCar.getId());
}
@@ -2838,6 +3468,7 @@
@Override
public void run() {
try {
+ System.out.println("推单推单推单!!");
Integer id = orderPrivateCar.getId();
Integer orderType = orderPrivateCar.getRideType() == 1 ? 1 : orderPrivateCar.getRideType() == 2 ? 9 : 8;
orderIds.add(orderPrivateCar.getId());//添加记录,防止调用接口重复提醒无人接单
@@ -2851,8 +3482,9 @@
// 判断是否为派单模式
TSysPushType sysPushType = tSysPushTypeService.selectOne(new EntityWrapper<TSysPushType>().eq("openCityId", openCity.getId()));
if(sysPushType!=null && sysPushType.getPushType()==2){
+ System.out.println( "派单模式");
OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(id);
- if (null == orderPrivateCar && orderPrivateCar.getState() == 1) {
+ if (null != orderPrivateCar && orderPrivateCar.getState() == 1) {
// 固定5公里进行派单
List<Driver> list = driverService.queryIdleDriver(orderType, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), 5.0, null);//所有附近空闲司机
if (list.size() > 0) {
@@ -2945,17 +3577,20 @@
}else {
// 没找到车辆
- orderPrivateCar.setState(10);
- orderPrivateCarMapper.updateById(orderPrivateCar);
- pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 1);
-
- // TODO 退款
+ Thread.sleep(5000);
+ ResultUtil refundResult = handlePrivateCarPrepayCancelRefund(orderPrivateCar, "无司机接单", "无司机接单", orderPrivateCar.getUserId());
+ if (refundResult == null) {
+ orderPrivateCar.setState(10);
+ orderPrivateCarMapper.updateById(orderPrivateCar);
+ }
+ pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 10);
}
}
}else {
+ System.out.println( "推单模式");
List<PushOrder> querys = pushOrderService.querys(null, 1, openCity.getId());//获取需要推送的次数
for (int i = 1; i <= querys.size() + 15; i++) {
@@ -2965,7 +3600,7 @@
}
int finalI = i;
PushOrder pushOrder = querys.stream().filter(s -> s.getType() == (finalI <= 3 ? finalI : 3)).findFirst().orElse(null);
- System.out.println("pushOrder:" + pushOrder);
+ System.out.println("pushOrder1:" + pushOrder);
int i2 = pushOrder.getPushTime() / 10;
if (i2 == 0) {
i2 = 1;
@@ -2976,6 +3611,7 @@
}
//获取空闲司机
List<Driver> list = driverService.queryIdleDriver(orderType, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), pushOrder.getPushDistance(), null);//所有附近空闲司机
+ System.out.println(list.toString()+"XXXXXXXX");
if (list.size() > 0) {
double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数
int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取)
@@ -3004,6 +3640,13 @@
if (i == querys.size() + 15 && state == 1) {
pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 1);
orderIds.remove(orderPrivateCar.getId());
+
+ // 没找到车辆
+ ResultUtil refundResult = handlePrivateCarPrepayCancelRefund(orderPrivateCar, "无司机接单", "无司机接单", orderPrivateCar.getUserId());
+ if (refundResult == null) {
+ orderPrivateCar.setState(10);
+ orderPrivateCarMapper.updateById(orderPrivateCar);
+ }
}
}
}
--
Gitblit v1.7.1