From 5cb1979f05446792cc33a8cb6b7aaae906da5a70 Mon Sep 17 00:00:00 2001 From: liujie <liujie> Date: 星期三, 16 八月 2023 09:32:38 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/master' --- user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java | 172 ++++++++++++++++++++++++++++++++++++++++++++++++--------- 1 files changed, 145 insertions(+), 27 deletions(-) diff --git a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java index 8a5c823..ec5e03e 100644 --- a/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java +++ b/user/guns-admin/src/main/java/com/supersavedriving/user/modular/system/service/impl/OrderServiceImpl.java @@ -112,6 +112,12 @@ @Autowired private IRechargeRecordService rechargeRecordService; + @Autowired + private IOrderService orderService; + + @Autowired + private ICompanyFundFlowService companyFundFlowService; + @Value("${wx.appletsAppid}") private String appletsAppid; @@ -167,7 +173,7 @@ int i = 0; Double scope = 5D; while (true){ - List<NearbyDriverWarpper> nearbyDriverWarppers = driverService.queryDriverPosition(estimatedCosts.getLng().toString(), estimatedCosts.getLat().toString(), scope); + List<NearbyDriverWarpper> nearbyDriverWarppers = driverService.queryDriverPosition(estimatedCosts.getStartLng().toString(), estimatedCosts.getStartLat().toString(), scope); if(nearbyDriverWarppers.size() == 0){ scope += 5; i++; @@ -207,7 +213,9 @@ */ public Order getOrderPrice(Integer type, Double distance, Integer waitTime, Order order, String city){ order = getOrderInitialPrice(order); - SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 5)); + Integer driverId = order.getDriverId(); + Driver driver = driverService.selectById(driverId); + SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 5).eq("companyId",driver.getBranchOfficeId())); if(null == systemConfig){ if(type == 1){//预估金额 order.setEstimatedPrice(0D); @@ -308,6 +316,9 @@ Double num7 = extraCost.getDouble("num7");//恶劣天气超出公里 Double num8 = extraCost.getDouble("num8");//恶劣天气超出公里单价 X/公里 Double num9 = extraCost.getDouble("num9");//恶劣天气最高收取金额 + Double num10 = extraCost.getDouble("num10");//节假日收费 +// Double num11 = extraCost.getDouble("num11");//恶劣天气最高收取金额 +// Double num12 = extraCost.getDouble("num12");//恶劣天气最高收取金额 //等待费用 if(waitTime.compareTo(num1 * 60) >= 0){ @@ -321,13 +332,13 @@ } //恶劣天气 - systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 8)); + systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 8).eq("companyId",driver.getBranchOfficeId())); if(null != systemConfig){ JSONObject jsonObject1 = JSON.parseObject(systemConfig.getContent()); Integer num11 = jsonObject1.getInteger("num1");//开启恶劣天气计价 if(1 == num11){ - boolean badWeather = WeatherUtil.isBadWeather(city); - if(badWeather){ +// boolean badWeather = WeatherUtil.isBadWeather(city); +// if(badWeather){ order.setBadWeatherDistance(num5);//恶劣天气公里 order.setBadWeatherPrice(num6);//恶劣天气费 if(distance.compareTo(num7) > 0){ @@ -347,14 +358,27 @@ order.setOverBadWeatherPrice(subtract.doubleValue());//恶劣天气超出公里费 } } - } +// } + } + } + + + + //节假日 + systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 9).eq("companyId",driver.getBranchOfficeId())); + if(null != systemConfig){ + JSONObject jsonObject1 = JSON.parseObject(systemConfig.getContent()); + Integer num11 = jsonObject1.getInteger("num1");//开启恶劣天气计价 + if(1 == num11){ + BigDecimal bigDecimal = new BigDecimal(num10); + order.setHolidayPrice(bigDecimal.doubleValue()); } } //计算总金额 BigDecimal bigDecimal = new BigDecimal(order.getStartPrice() + order.getOverDrivePrice() + order.getLongDistancePrice() + order.getOverLongDistancePrice() + - order.getWaitTimePrice() + order.getOutWaitTimePrice() + order.getBadWeatherPrice() + order.getOverBadWeatherPrice() - order.getDiscountAmount()).setScale(2, BigDecimal.ROUND_HALF_EVEN); + order.getWaitTimePrice() + order.getOutWaitTimePrice() + order.getBadWeatherPrice() + order.getOverBadWeatherPrice()+order.getHolidayPrice() - order.getDiscountAmount()).setScale(2, BigDecimal.ROUND_HALF_EVEN); if(type == 1){//预估价 order.setEstimatedPrice(bigDecimal.doubleValue()); @@ -393,6 +417,7 @@ order.setCouponId(null);//优惠券 order.setDiscountAmount(0D);//折扣优惠金额 order.setDiscount(0D);//折扣 + order.setHolidayPrice(0D); return order; } @@ -416,18 +441,6 @@ if(null != order){ return ResultUtil.error("您还有正在进行的订单"); } - - String value = redisUtil.getValue("USER" + uid); - if(ToolUtil.isEmpty(value)){ - redisUtil.setStrValue("USER" + uid, System.currentTimeMillis() + "", 60); - }else{ - Long s = System.currentTimeMillis() - Long.valueOf(value); - if(s.compareTo(60000L) < 0){//1分钟 - return ResultUtil.error("数据处理中"); - } - redisUtil.setStrValue("USER" + uid, System.currentTimeMillis() + "", 60); - } - String startAddress = travelOrder.getStartAddress(); startAddress = startAddress.replaceAll("& #40;", "("); @@ -510,6 +523,7 @@ } } } + redisUtil.setStrValue("newOrder", "true"); return ResultUtil.success(order.getId()); } @@ -583,7 +597,8 @@ continue; } Driver driver1 = driverService.selectById(youTuiDriver.getDriverId()); - if(driver1.getServerStatus() == 2 || driver1.getOpenOrderQRCode() == 1){ + int count = orderService.selectCount(new EntityWrapper<Order>().eq("driverId", youTuiDriver.getDriverId()).eq("status", 1).in("state", Arrays.asList(102, 103, 104, 105, 201, 401))); + if(driver1.getServerStatus() == 2 || driver1.getOpenOrderQRCode() == 1 || count > 0){ continue; } DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", driver1.getId()).eq("status", 1)); @@ -637,6 +652,10 @@ } DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", driver1.getId()).eq("status", 1)); if(null == driverWork){ + continue; + } + int count = orderService.selectCount(new EntityWrapper<Order>().eq("driverId", driver1.getId()).eq("status", 1).in("state", Arrays.asList(102, 103, 104, 105, 201, 401))); + if(count > 0){ continue; } @@ -699,6 +718,7 @@ order1.setHallOrder(1); OrderServiceImpl.this.updateById(order1); ExtraPushOrder(order); + redisUtil.setStrValue("lobbyOrder", "true"); } } }, num4 * 1000); @@ -706,6 +726,7 @@ order.setHallOrder(1); this.updateById(order); ExtraPushOrder(order); + redisUtil.setStrValue("lobbyOrder", "true"); } redisUtil.unlock(); }catch (Exception e){ @@ -797,6 +818,7 @@ pushOrderInfoWarpper.setState(order.getState()); pushUtil.pushOrderInfo(order.getDriverId(), 2, pushOrderInfoWarpper); } + redisUtil.setStrValue("cancelOrder", "true"); return ResultUtil.success(); } @@ -836,6 +858,12 @@ @Override public ResultUtil editOrderEndAddress(Integer uid, EditOrderEndAddress editOrderEndAddress) throws Exception { Order order = this.selectById(editOrderEndAddress.getOrderId()); + + String endAddress = editOrderEndAddress.getEndAddress(); + endAddress = endAddress.replaceAll("& #40;", "("); + endAddress = endAddress.replaceAll("& #41;", ")"); + editOrderEndAddress.setEndAddress(endAddress); + order.setEndAddress(editOrderEndAddress.getEndAddress()); order.setEndLat(editOrderEndAddress.getEndLat().toString()); order.setEndLng(editOrderEndAddress.getEndLng().toString()); @@ -908,6 +936,7 @@ orderPriceWarpper.setDiscountedPrice(order.getDiscountedPrice()); orderPriceWarpper.setBadWeatherPrice(order.getBadWeatherPrice()); orderPriceWarpper.setPayMoney(order.getPayMoney()); + orderPriceWarpper.setOrderMoney(order.getOrderMoney()); if(order.getState() < 107){ orderPriceWarpper.setPayMoney(order.getOrderMoney()); } @@ -948,9 +977,9 @@ orderPriceWarpper.setCouponId(coupon.getId()); } if(payType == 1 && null == couponId && appUser.getHavDiscount() == 1 && balance.compareTo(orderMoney) >= 0){//使用余额抵扣 - orderPriceWarpper.setDiscount(9D); - orderPriceWarpper.setDiscountAmount(new BigDecimal(orderMoney * 0.1).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); - orderMoney = new BigDecimal(orderMoney * 0.9).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + orderPriceWarpper.setDiscount(9.5D); + orderPriceWarpper.setDiscountAmount(new BigDecimal(orderMoney * 0.05).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); + orderMoney = new BigDecimal(orderMoney * 0.95).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); } if(null != couponId){ UserToCoupon userToCoupon = userToCouponService.selectById(couponId); @@ -1485,6 +1514,7 @@ accountChangeDetailService.saveData(accountChangeDetail); //补贴中分账 + Double balance = revenueService.queryCompanyBalance();//平台账户余额 Double discountedPrice = order.getDiscountedPrice(); List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); for (RechargeRecord rechargeRecord : rechargeRecords) { @@ -1510,6 +1540,14 @@ } } + CompanyFundFlow companyFundFlow = new CompanyFundFlow(); + companyFundFlow.setBalance(new BigDecimal(balance)); + companyFundFlow.setObjectType(1); + companyFundFlow.setDriverId(driver.getId()); + companyFundFlow.setType(5); + companyFundFlow.setMoney(new BigDecimal(order.getDiscountedPrice())); + companyFundFlow.setCreateTime(new Date()); + companyFundFlowService.insert(companyFundFlow); } } @@ -1555,6 +1593,7 @@ JSONObject jsonObject = JSON.parseObject(systemConfig.getContent()); Double num2 = jsonObject.getDouble("num2"); Double num3 = jsonObject.getDouble("num3"); + Double num4_ = jsonObject.getDouble("num4"); if(order.getOrderMoney().compareTo(num2) >= 0){//订单金额大于num2开始分佣 AccountChangeDetail accountChangeDetail1 = new AccountChangeDetail(); accountChangeDetail1.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(5)); @@ -1956,10 +1995,60 @@ } } } - //处理代理商抽佣 - if(num3 > 0 && null != driver){ + //处理平台抽佣 + if(num4_ > 0){ + //先平台抽佣 + num4_ = (num3 >= num4_ ? num4_ : num3); Revenue revenue = new Revenue(); - revenue.setType(1); + revenue.setType(2); + revenue.setUserType(4); + revenue.setUserId(driver.getAgentId()); + revenue.setOrderId(order.getId()); + revenue.setAmount(num4_); + revenue.setCreateTime(new Date()); + revenueService.insert(revenue); + //司机充值记录分账 + Double num4_1 = num4_; + List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 2).eq("userId", driver.getId()).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); + for (RechargeRecord rechargeRecord : rechargeRecords) { + Double surplusDividedAmount = rechargeRecord.getSurplusDividedAmount(); + if(surplusDividedAmount.compareTo(num4_1) >= 0){ + ResultUtil fengzhang = fengzhang(3, null, "553021440975", order.getId().longValue(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), num4_1, 3); + if(10000 == fengzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(new BigDecimal(rechargeRecord.getSurplusDividedAmount()).subtract(new BigDecimal(num4_1)).setScale(2, RoundingMode.HALF_EVEN).doubleValue()); + rechargeRecordService.updateById(rechargeRecord); + } + break; + }else{ + ResultUtil fengzhang = fengzhang(3, null, "553021440975", order.getId().longValue(), rechargeRecord.getId(), rechargeRecord.getOrderNumber(), surplusDividedAmount, 3); + if(10000 == fengzhang.getCode()){ + rechargeRecord.setSurplusDividedAmount(0D); + rechargeRecordService.updateById(rechargeRecord); + num4_1 = new BigDecimal(num4_1).subtract(new BigDecimal(surplusDividedAmount)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + }else{ + break; + } + } + } + Double balance = revenueService.queryAgentBalance(driver.getAgentId()); + //记录企业流水 + CompanyFundFlow companyFundFlow = new CompanyFundFlow(); + companyFundFlow.setType(3); + companyFundFlow.setObjectType(1); + companyFundFlow.setObjectId(null); + companyFundFlow.setBalance(new BigDecimal(balance)); + companyFundFlow.setMoney(new BigDecimal(num4_)); + companyFundFlow.setCreateTime(new Date()); + companyFundFlowService.insert(companyFundFlow); + double v = new BigDecimal(num3).subtract(new BigDecimal(num4_)).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); + num3 = (num3 >= num4_ ? v : 0); + } + + //代理商分佣 + if(num3 > 0 && null != driver){ + Double balance = revenueService.queryAgentBalance(driver.getAgentId()); + Revenue revenue = new Revenue(); + revenue.setType(2); revenue.setUserType(3); revenue.setUserId(driver.getAgentId()); revenue.setOrderId(order.getId()); @@ -1991,6 +2080,16 @@ } } } + + //记录企业流水 + CompanyFundFlow companyFundFlow = new CompanyFundFlow(); + companyFundFlow.setType(3); + companyFundFlow.setObjectType(2); + companyFundFlow.setObjectId(driver.getAgentId()); + companyFundFlow.setBalance(new BigDecimal(balance)); + companyFundFlow.setMoney(new BigDecimal(num3)); + companyFundFlow.setCreateTime(new Date()); + companyFundFlowService.insert(companyFundFlow); } } } @@ -2015,7 +2114,7 @@ revenue.setUserType(2); revenue.setUserId(driver.getId()); revenue.setOrderId(order.getId()); - revenue.setAmount(order.getPayMoney() + order.getDiscountedPrice() + order.getDiscountAmount()); + revenue.setAmount(order.getPayMoney() + order.getDiscountedPrice());//todo 折扣司机承担 revenue.setCreateTime(new Date()); revenueService.insert(revenue); @@ -2076,6 +2175,7 @@ accountChangeDetailService.saveData(accountChangeDetail); //补贴中分账 + Double balance = revenueService.queryCompanyBalance(); Double discountedPrice = order.getDiscountedPrice(); List<RechargeRecord> rechargeRecords1 = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); for (RechargeRecord rechargeRecord : rechargeRecords1) { @@ -2100,6 +2200,14 @@ } } } + CompanyFundFlow companyFundFlow = new CompanyFundFlow(); + companyFundFlow.setBalance(new BigDecimal(balance)); + companyFundFlow.setObjectType(1); + companyFundFlow.setDriverId(driver.getId()); + companyFundFlow.setType(5); + companyFundFlow.setMoney(new BigDecimal(order.getDiscountedPrice())); + companyFundFlow.setCreateTime(new Date()); + companyFundFlowService.insert(companyFundFlow); } // TODO: 2023/6/25 折扣优惠由司机承担 @@ -2240,6 +2348,7 @@ driverService.updateById(driver); accountChangeDetailService.saveData(accountChangeDetail); //补贴中分账 + Double balance = revenueService.queryCompanyBalance(); Double discountedPrice = order.getDiscountedPrice(); List<RechargeRecord> rechargeRecords = rechargeRecordService.selectList(new EntityWrapper<RechargeRecord>().eq("type", 4).eq("payStatus", 2).gt("surplusDividedAmount", 0).orderBy("createTime")); for (RechargeRecord rechargeRecord : rechargeRecords) { @@ -2265,6 +2374,15 @@ } } + CompanyFundFlow companyFundFlow = new CompanyFundFlow(); + companyFundFlow.setBalance(new BigDecimal(balance)); + companyFundFlow.setObjectType(1); + companyFundFlow.setDriverId(driver.getId()); + companyFundFlow.setType(5); + companyFundFlow.setMoney(new BigDecimal(order.getDiscountedPrice())); + companyFundFlow.setCreateTime(new Date()); + companyFundFlowService.insert(companyFundFlow); + } } -- Gitblit v1.7.1