From b50c961c49851d140d77d549db34a9f6400dadd4 Mon Sep 17 00:00:00 2001
From: liujie <1793218484@qq.com>
Date: 星期二, 19 八月 2025 19:03:10 +0800
Subject: [PATCH] 跨城推广
---
UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java | 172 +++++++++++++++++++++++++++++++++++++--------------------
1 files changed, 111 insertions(+), 61 deletions(-)
diff --git a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
index 16d223b..b0806d6 100644
--- a/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
+++ b/UserQYTTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/specialTrain/server/impl/OrderPrivateCarServiceImpl.java
@@ -398,7 +398,7 @@
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("DRIVER" + String.valueOf(order.getDriverId()));
+ 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());
@@ -585,8 +585,9 @@
Map<String, String> distanceMap = gdMapElectricFenceUtil.getDistance(orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), 1);
orderPrivateCar.setEstimateMileage(Double.valueOf(distanceMap.get("distance")));
orderPrivateCar.setEstimateTime(Double.valueOf(distanceMap.get("duration")) / 60);
+ UserInfo userInfo = userInfoService.selectById(uid);
if (instead == 0 || ToolUtil.isEmpty(orderPrivateCar.getPassengers())) {
- UserInfo userInfo = userInfoService.selectById(uid);
+
if (ToolUtil.isEmpty(userInfo.getPhone())) {
return ResultUtil.error("请先绑定手机号码");
}
@@ -612,11 +613,11 @@
orderPrivateCar.setPromotionDriverId(promotion);
}
-
- this.insert(orderPrivateCar);
-
//判断独享,一口价,拼车
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");
@@ -667,7 +668,7 @@
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("DRIVER" + String.valueOf(order.getDriverId()));
+ 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());
@@ -701,7 +702,32 @@
orderPrivateCar.setIsReassign(1);
orderPrivateCar.setIsDelete(1);
orderPrivateCar.setPid(orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid());
+
+ Integer promotion1 = isPromotion(orderPrivateCar.getUserId());
+ if(promotion1!=null){
+ orderPrivateCar.setPromotion(2);
+ Driver driver1 = driverService.selectById(promotion);
+ orderPrivateCar.setPromotionUser(driver1.getName());
+ orderPrivateCar.setPromotionPhone(driver1.getPhone());
+ orderPrivateCar.setPromotionDriverId(promotion1);
+ }
+
+ Company company = companyService.selectById(driver.getCompanyId());
+ //调三方订单中心创建行程单
+ CreateTravelItineraryRequest request = new CreateTravelItineraryRequest();
+ request.setOrderNo("PR" + orderPrivateCar.getId());
+ request.setCustomerId(userInfo.getOnconUUID());
+ request.setDriverId(driver.getEmpId().toString());
+ request.setSupplierShopId(company.getEnterCode());
+ if(orderPrivateCar.getPromotion() !=null && 2 == orderPrivateCar.getPromotion()){
+ Driver driver1 = driverService.selectById(orderPrivateCar.getPromotionDriverId());
+ request.setPromoterId(driver1.getEmpId().toString());
+ }
+ request.setServiceType(2);
+ String travelItinerary = OrderUtil.createTravelItinerary(request);
+ orderPrivateCar.setTravelId(travelItinerary);
this.insertOrUpdate(orderPrivateCar);
+
//修改总订单人数
OrderPrivateCar orderPrivateCar2 = new OrderPrivateCar();
orderPrivateCar2.setSpellSuccess(1);
@@ -754,7 +780,7 @@
UserInfo userInfo = userInfoService.selectById(userId);
if(userInfo.getBindDriverId()!=null && userInfo.getBindExpireDate().getTime()<=System.currentTimeMillis()){
String registAreaCode = userInfo.getRegistAreaCode();
- TDriverPromotionActivity tDriverPromotionActivity = driverPromotionActivityService.selectOne(new EntityWrapper<TDriverPromotionActivity>().eq("districtCode", registAreaCode).eq("state",1).ge("startTime", new Date()).lt("endTime", new Date()).last("AND FIND_IN_SET(" + 1 + ", bizType) limit 1"));
+ TDriverPromotionActivity tDriverPromotionActivity = driverPromotionActivityService.selectOne(new EntityWrapper<TDriverPromotionActivity>().eq("districtCode", registAreaCode).eq("state",1).le("startTime", new Date()).ge("endTime", new Date()).last("AND FIND_IN_SET(" + 1 + ", bizType) limit 1"));
if(tDriverPromotionActivity!=null){
return userInfo.getBindDriverId();
}
@@ -843,7 +869,7 @@
JSONObject jsonObject = JSONObject.parseObject(spellOrderRule.getContent());
//判断时间
if (orderPrivateCar.getTravelTime().getTime() >= order.getTravelTime().getTime() - jsonObject.getInteger("num5") * 60000L && orderPrivateCar.getTravelTime().getTime() <= order.getTravelTime().getTime() + jsonObject.getInteger("num6") * 60000L) {
- String value = (String) redisTemplate.opsForValue().get("DRIVER" + String.valueOf(order.getDriverId()));
+ 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 已改成计算直线距离
@@ -1038,7 +1064,9 @@
Driver driver2 = driverService.selectById(orderPrivateCar.getPromotionDriverId());
request.setPromoterId(driver2.getEmpId().toString());
}
- OrderUtil.modifyTravelItinerary(request);
+ if(orderPrivateCar.getTravelId()!=null){
+ OrderUtil.modifyTravelItinerary(request);
+ }
}
} else {
OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
@@ -1251,14 +1279,10 @@
if(Integer.valueOf(String.valueOf(map.get("state"))) == 11){
map.put("state", map.get("oldState"));
}
- if(Integer.valueOf(String.valueOf(map.get("state"))) ==7 && (map.get("responsibilityType")==null || Integer.valueOf(String.valueOf(map.get("responsibilityType")))<4)){
- map.put("appealButton", 1);
- }
if(map.get("abnormalIntro")!=null){
map.put("appealStatus", 1);
}
-
-
+
if(Integer.valueOf(String.valueOf(map.get("state"))) != 8 && Integer.valueOf(String.valueOf(map.get("state"))) != 9){
map.put("redPacketMoney", null);
map.put("couponMoney", null);
@@ -1283,7 +1307,7 @@
return orderTaxiService.queryOrderServer(orderId, uid);
}
//计算预计距离和剩余时间
- String value = (String) redisTemplate.opsForValue().get("DRIVER" + String.valueOf(orderPrivateCar.getDriverId()));
+ String value = (String) redisTemplate.opsForValue().get("dache:DRIVER" + String.valueOf(orderPrivateCar.getDriverId()));
if(null == value || "".equals(value)){
System.err.println("司机没有上传位置信息");
@@ -2185,7 +2209,12 @@
//调用中台创建订单及拉起支付接口
TradeOrderCreateData tradeOrderCreateData = new TradeOrderCreateData();
tradeOrderCreateData.setTreatShopId(driver.getEmpId().toString());
- tradeOrderCreateData.setField1("{\"profitSharing\":\"1\",\"isPromote\":\"" + (orderPrivateCar.getPromotion() == 2 ? 1 : 0) + "\"}");
+ //追缴单不要分账
+ if(0 == orderPrivateCar.getRecoveryOrder()){
+ tradeOrderCreateData.setField1("{\"profitSharing\":\"1\",\"isPromote\":\"" + (orderPrivateCar.getPromotion() == 2 ? 1 : 0) + "\"}");
+ }else{
+ tradeOrderCreateData.setField1("{\"profitSharing\":\"0\",\"isPromote\":\"0\"}");
+ }
tradeOrderCreateData.setCharge(new BigDecimal(orderMoney));
tradeOrderCreateData.setOrderId(orderPrivateCar.getTravelId());
tradeOrderCreateData.setOrderNo("PR" + orderPrivateCar.getId());
@@ -2199,6 +2228,11 @@
List<GoodsInfoRequest> goodsInfo = new ArrayList<>();
GoodsInfoRequest goodsInfoRequest = new GoodsInfoRequest();
goodsInfoRequest.setSubOpenId(userInfo.getAppletsOpenId());
+ if(0 == orderPrivateCar.getRecoveryOrder()){
+ goodsInfoRequest.setProfitSharing("1");
+ }else{
+ goodsInfoRequest.setProfitSharing("0");
+ }
goodsInfo.add(goodsInfoRequest);
tradeOrderCreateData.setGoodsInfo(goodsInfo);
TradeOrderCreate tradeOrderCreate = OrderUtil.tradeOrderCreate1(tradeOrderCreateData);
@@ -2211,7 +2245,7 @@
}else{
//拉起支付
TradePayOff1Data tradePayOff1Data = new TradePayOff1Data();
- tradePayOff1Data.setPartnerPayId("PR" + orderPrivateCar.getId());
+ tradePayOff1Data.setPartnerPayId(orderPrivateCar.getTravelId());
tradePayOff1Data.setTotalFee(Double.valueOf(orderMoney * 100).intValue() + "");
tradePayOff1Data.setRetUrl(path);
tradePayOff1Data.setClientIp(ip);
@@ -2219,6 +2253,11 @@
List<GoodsInfoRequest> goodsInfo = new ArrayList<>();
GoodsInfoRequest goodsInfoRequest = new GoodsInfoRequest();
goodsInfoRequest.setSubOpenId(userInfo.getAppletsOpenId());
+ if(0 == orderPrivateCar.getRecoveryOrder()){
+ goodsInfoRequest.setProfitSharing("1");
+ }else{
+ goodsInfoRequest.setProfitSharing("0");
+ }
goodsInfo.add(goodsInfoRequest);
tradePayOff1Data.setGoodsInfo(goodsInfo);
PayInfo payInfo = OrderUtil.tradePayOff1(tradePayOff1Data);
@@ -2314,7 +2353,12 @@
//添加收入
Map<String, Object> map = incomeService.saveIncome(orderPrivateCar.getId(), 1, orderPrivateCar.getOrderMoney());
orderPrivateCar.setSplitAllocation(JSON.toJSONString(map));
-
+
+
+ this.updateAllColumnById(orderPrivateCar);
+ promotion(orderPrivateCar.getId());
+
+
// TODO: 2020/5/24 这里需要给司机和用户推送订单状态
new Thread(new Runnable() {
@Override
@@ -2342,8 +2386,12 @@
resultUtil = appOrderController.placeAnOrder(new BigDecimal(orderMoney), 4, orderId, 6, integer);
}
-
- this.updateAllColumnById(orderPrivateCar);
+
+ if(payType != 3){
+ this.updateAllColumnById(orderPrivateCar);
+ }
+
+
return resultUtil;
}
@@ -2625,7 +2673,7 @@
OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
List<PushOrder> querys = pushOrderService.querys(null, 2, openCity.getId());//获取需要推送的次数
int time = 0;
- for (int i = 1; i <= querys.size() + 5; i++) {
+ for (int i = 1; i <= querys.size() + 15; i++) {
int finalI = i;
PushOrder pushOrder = querys.stream().filter(s -> s.getType() == (finalI <= 3 ? finalI : 3)).findFirst().orElse(null);
time += pushOrder.getPushTime() * 1000;
@@ -2718,7 +2766,7 @@
paymentRecordService.updateById(query);
OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
SysIntegral query1 = sysIntegralMapper.query(openCity.getId());
- System.out.println("query1:" + query1);
+// System.out.println("query1:" + query1);
userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分
//添加交易明细
@@ -2789,7 +2837,7 @@
OpenCity openCity = openCityService.openCity1(startLon.toString(), startLat.toString());
List<PushOrder> querys = pushOrderService.querys(null, 1, openCity.getId());//获取需要推送的次数
//整轮派单结束,若无司机接单,系统自动增加派单5轮,若增加5轮后任无司机接单,则系统结束派单,乘客端显示无司机接单、是否再次打车
- for (int i = 1; i <= querys.size() + 5; i++) {
+ for (int i = 1; i <= querys.size() + 15; i++) {
OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(id);
if (null == orderPrivateCar || orderPrivateCar.getState() > 1) {
break;
@@ -2797,45 +2845,42 @@
int finalI = i;
PushOrder pushOrder = querys.stream().filter(s -> s.getType() == (finalI <= 3 ? finalI : 3)).findFirst().orElse(null);
System.out.println("pushOrder:" + pushOrder);
- int i2 = pushOrder.getPushTime() / 10;
- if (i2 == 0) {
- i2 = 1;
+ if (orderPrivateCar.getState() > 1) {
+ break;
}
- for (int i1 = 0; i1 < i2; i1++) {
- if (orderPrivateCar.getState() > 1) {
- break;
- }
- //获取空闲司机
- List<Driver> list = driverService.queryIdleDriver(orderType, serverCarModelId, startLon, startLat, pushOrder.getPushDistance(), null);//所有附近空闲司机
- if (list.size() > 0) {
- double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数
- int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取)
- lastIndex = lastIndex == 0 ? list.size() : lastIndex;
- list = list.subList(0, lastIndex);//获取空闲司机中占比数据
- for (Driver driver : list) {//开始进行推送
- boolean bo = false;
- for (Integer integer : integers) {
- if (integer.compareTo(driver.getId()) == 0) {
- bo = true;
- break;
- }
+ //获取空闲司机
+ List<Driver> list = driverService.queryIdleDriver(orderType, serverCarModelId, startLon, startLat, pushOrder.getPushDistance(), null);//所有附近空闲司机
+ if (list.size() > 0) {
+ double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数
+ int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取)
+ lastIndex = lastIndex == 0 ? list.size() : lastIndex;
+ list = list.subList(0, lastIndex);//获取空闲司机中占比数据
+ for (Driver driver : list) {//开始进行推送
+ boolean bo = false;
+ for (Integer integer : integers) {
+ if (integer.compareTo(driver.getId()) == 0) {
+ bo = true;
+ break;
}
- if (bo) {
- continue;
- }
- pushUtil.pushOrderState(2, driver.getId(), id, 1, 1, pushOrder.getPushTime());
}
+ if (bo) {
+ continue;
+ }
+ pushUtil.pushOrderState(2, driver.getId(), id, 1, 1, pushOrder.getPushTime());
}
- Thread.sleep(10000);//设置等待时间
- Integer state = orderPrivateCarMapper.selectById(orderPrivateCar.getId()).getState();
- if (state > 1) {
- orderIds.remove(orderPrivateCar.getId());
- break;
- }
- if (i == querys.size() + 5) {
- pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1);
- orderIds.remove(orderPrivateCar.getId());
- }
+ }
+ Thread.sleep(pushOrder.getPushTime() * 1000);//设置等待时间
+ OrderPrivateCar orderPrivateCar1 = orderPrivateCarMapper.selectById(orderPrivateCar.getId());
+ Integer state =orderPrivateCar1.getState();
+ if (state > 1) {
+ orderIds.remove(orderPrivateCar.getId());
+ break;
+ }
+ if (i == querys.size() + 15) {
+ orderPrivateCar1.setState(10);
+ orderPrivateCarMapper.updateById(orderPrivateCar1);
+ pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1);
+ orderIds.remove(orderPrivateCar.getId());
}
}
} catch (Exception e) {
@@ -2866,7 +2911,7 @@
}
OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString());
List<PushOrder> querys = pushOrderService.querys(null, 1, openCity.getId());//获取需要推送的次数
- for (int i = 1; i <= querys.size() + 5; i++) {
+ for (int i = 1; i <= querys.size() + 15; i++) {
OrderPrivateCar orderPrivateCar = orderPrivateCarMapper.selectById(id);
if (null == orderPrivateCar || orderPrivateCar.getState() > 1) {
break;
@@ -2909,7 +2954,7 @@
orderIds.remove(orderPrivateCar.getId());
return;
}
- if (i == querys.size() + 5 && state == 1) {
+ if (i == querys.size() + 15 && state == 1) {
pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1);
orderIds.remove(orderPrivateCar.getId());
}
@@ -2944,15 +2989,20 @@
UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId());
// if(userInfo.getBindDriverId()!=null && userInfo.getBindExpireDate().getTime()<=System.currentTimeMillis()){
// 开始绑定的 后面到期也结算
+ System.out.println("eeeee+"+orderPrivateCar.getPromotionDriverId());
if(orderPrivateCar.getPromotionDriverId()!=null ){
String registAreaCode = userInfo.getRegistAreaCode();
- TDriverPromotionActivity tDriverPromotionActivity = driverPromotionActivityService.selectOne(new EntityWrapper<TDriverPromotionActivity>().eq("districtCode", registAreaCode).ge("startTime", new Date()).lt("endTime", new Date()).last("AND FIND_IN_SET(" + 1 + ", bizType) limit 1"));
+ TDriverPromotionActivity tDriverPromotionActivity = driverPromotionActivityService.selectOne(new EntityWrapper<TDriverPromotionActivity>().eq("districtCode", registAreaCode).le("startTime", new Date()).ge("endTime", new Date()).last("AND FIND_IN_SET(" + 1 + ", bizType) limit 1"));
+ System.out.println("ddddd"+tDriverPromotionActivity);
if(tDriverPromotionActivity!=null){
Double payMoney = orderPrivateCar.getPayMoney();
+ System.out.println(payMoney);
BigDecimal bigDecimal = tDriverPromotionActivity.getCommissionRatio().divide(new BigDecimal(100), 2, RoundingMode.HALF_UP).multiply(new BigDecimal(payMoney)).setScale(2, RoundingMode.HALF_UP);
+ System.out.println(bigDecimal);
orderPrivateCar.setPromotionDriverId(userInfo.getBindDriverId());
orderPrivateCar.setPromotionMoney(bigDecimal);
orderPrivateCar.setPromotionActivityId(tDriverPromotionActivity.getId());
+ orderPrivateCar.setSuccessTime(new Date());
this.baseMapper.updateById(orderPrivateCar);
}
}
--
Gitblit v1.7.1