From d4f8078c2a062864dab885d6bd54fbe1195f85e2 Mon Sep 17 00:00:00 2001
From: puzhibing <393733352@qq.com>
Date: 星期一, 12 六月 2023 11:07:18 +0800
Subject: [PATCH] 修改计费bug
---
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/DriverServiceImpl.java | 48 +-
user/guns-admin/src/main/java/com/agentdriving/user/modular/system/auth/AuthIntercepter.java | 2
driver/guns-admin/src/main/resources/application.yml | 6
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java | 4
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/UserMgrController.java | 49 ---
user/guns-admin/src/test/java/com/agentdriving/user/GunsApplicationTest.java | 28 ++
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/auth/AuthIntercepter.java | 2
user/guns-admin/src/main/java/com/agentdriving/user/modular/system/service/impl/SystemConfigServiceImpl.java | 8
user/guns-admin/src/main/java/com/agentdriving/user/modular/system/service/impl/OrderServiceImpl.java | 111 +++++++
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/DriverController.java | 3
management/guns-admin/src/main/webapp/WEB-INF/view/system/tOrder/tOrderDetail.html | 166 ++++++++---
driver/guns-admin/src/test/java/com/agentdriving/driver/GunsApplicationTest.java | 17 +
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/UploadUtil.java | 2
user/guns-admin/src/main/java/com/agentdriving/user/modular/system/service/IOrderService.java | 2
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java | 2
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java | 56 +++
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/CashWithdrawalServiceImpl.java | 20
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriver.java | 65 ++++
user/guns-admin/src/main/java/com/agentdriving/user/modular/system/util/PayMoneyUtil.java | 2
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/OrderServiceImpl.java | 144 ++++++---
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TOrderController.java | 38 ++
driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/PayMoneyUtil.java | 6
user/guns-admin/src/main/resources/application.yml | 6
23 files changed, 564 insertions(+), 223 deletions(-)
diff --git a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/DriverController.java b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/DriverController.java
index cf2ab47..bc8a3de 100644
--- a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/DriverController.java
+++ b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/api/DriverController.java
@@ -909,6 +909,9 @@
})
public ResponseWarpper<String> uploadImg(MultipartFile file){
try {
+ if(null == file){
+ return ResponseWarpper.success(ResultUtil.error("请上传有效的图片"));
+ }
InputStream inputStream = file.getInputStream();
String name = file.getOriginalFilename();
name = UUIDUtil.getRandomCode() + name.substring(name.lastIndexOf("."));
diff --git a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/auth/AuthIntercepter.java b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/auth/AuthIntercepter.java
index 2a6635f..4320a8d 100644
--- a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/auth/AuthIntercepter.java
+++ b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/auth/AuthIntercepter.java
@@ -25,7 +25,7 @@
String appid = req.getParameter("appid");
String sign = req.getParameter("sign");
ResultUtil resultUtil = authService.checkSyncAuth(appid, sign, req);
- if (resultUtil.getCode() != 200) {
+ if (resultUtil.getCode() != 10000) {
res.setStatus(HttpStatus.OK.value());
res.setHeader("Content-type", "text/html;charset=UTF-8");
res.getWriter().print(JSON.toJSONString(resultUtil));//Res.Failure("req timeout, please try again")
diff --git a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/CashWithdrawalServiceImpl.java b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/CashWithdrawalServiceImpl.java
index 9d4191a..a20a8e9 100644
--- a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/CashWithdrawalServiceImpl.java
+++ b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/CashWithdrawalServiceImpl.java
@@ -89,16 +89,16 @@
driverService.updateById(driver);
accountChangeDetailService.saveData(accountChangeDetail);
-
- SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
- String outDetailNo = sdf.format(new Date()) + cashWithdrawal.getId();
- String s = payMoneyUtil.weixinTransferMoney(outDetailNo, money, driver.getOpenid(), driver.getName(), "【芳华代驾】提现付款!");
- if(ToolUtil.isEmpty(s)){
- return ResultUtil.error("提现异常,请联系管理员");
- }
- cashWithdrawal.setState(2);
- cashWithdrawal.setOrderNumber(s);
- this.updateById(cashWithdrawal);
+ // TODO: 2023/6/5 暂未开通
+// SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");
+// String outDetailNo = sdf.format(new Date()) + cashWithdrawal.getId();
+// String s = payMoneyUtil.weixinTransferMoney(outDetailNo, money, driver.getOpenid(), driver.getName(), "【芳华代驾】提现付款!");
+// if(ToolUtil.isEmpty(s)){
+// return ResultUtil.error("提现异常,请联系管理员");
+// }
+// cashWithdrawal.setState(2);
+// cashWithdrawal.setOrderNumber(s);
+// this.updateById(cashWithdrawal);
return ResultUtil.success();
}
diff --git a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/DriverServiceImpl.java b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/DriverServiceImpl.java
index ec75c25..a7bd9da 100644
--- a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/DriverServiceImpl.java
+++ b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/DriverServiceImpl.java
@@ -123,27 +123,6 @@
if(null != driver && driver.getApprovalStatus() == 2){
return ResultUtil.error("该手机账号已审核通过,请直接登录。");
}
-// String idcardFront = driverRegisterWarpper.getIdcardFront();
-// MultipartFile file = MultipartFileUtil.fileToMultipartFile(new File(idcardFront));
-// JSONObject certificate = OCRUtil.certificate(2, file);
-// if(null == certificate){
-// return ResultUtil.error("身份证识别失败");
-// }
-// String idcode = certificate.getString("公民身份号码");
-// driver.setIdcard(idcode);
-//
-//
-// String driverLicense = driverRegisterWarpper.getDriverLicense();
-// file = MultipartFileUtil.fileToMultipartFile(new File(driverLicense));
-// certificate = OCRUtil.certificate(5, file);
-// if(null == certificate){
-// return ResultUtil.error("驾驶证识别失败");
-// }
-// System.err.println("驾驶证:" + certificate.toString());
-// String driverLicenseNumber = certificate.getString("驾驶证号码");
-// driver.setDriverLicenseNumber(driverLicenseNumber);
-// driver.setFirstCertificateTime(null);
-
//账号审核拒绝后的处理
if(null != driver && driver.getApprovalStatus() == 3){
@@ -165,6 +144,29 @@
}
driver.setCreateTime(new Date());
this.insert(driver);
+
+ //司机邀请注册奖励
+ if(null != driver.getInviterId()){
+ Driver driver1 = this.selectById(driver.getInviterId());
+ SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 4));
+ if(null != systemConfig){
+ Integer num7 = JSON.parseObject(systemConfig.getContent()).getInteger("num7");
+ if(num7 > 0){
+ AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
+ accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
+ accountChangeDetail.setUserType(2);
+ accountChangeDetail.setUserId(driver1.getId());
+ accountChangeDetail.setType(2);
+ accountChangeDetail.setChangeType(5);
+ accountChangeDetail.setOldData(driver1.getIntegral().doubleValue());
+ driver1.setIntegral(driver1.getIntegral() + num7);
+ accountChangeDetail.setNewData(driver1.getIntegral().doubleValue());
+ accountChangeDetail.setExplain("邀请司机注册奖励");
+ accountChangeDetailService.saveData(accountChangeDetail);
+ this.updateById(driver1);
+ }
+ }
+ }
}
return ResultUtil.success();
}
@@ -697,7 +699,7 @@
if(type == 1){
ResultUtil weixinpay = payMoneyUtil.weixinpay("余额充值", "", out_trade_no, amount.toString(), "/base/driver/balanceRechargeCallback", "APP");
- if(weixinpay.getCode() != 200){
+ if(weixinpay.getCode() != 10000){
return weixinpay;
}
new Thread(new Runnable() {
@@ -777,7 +779,7 @@
}
if(type == 2){
ResultUtil<String> alipay = payMoneyUtil.alipay("余额充值", "余额充值", out_trade_no, amount.toString(), "/base/driver/balanceRechargeCallbackAli");
- if(alipay.getCode() != 200){
+ if(alipay.getCode() != 10000){
return alipay;
}
new Thread(new Runnable() {
diff --git a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/OrderServiceImpl.java b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/OrderServiceImpl.java
index b2386b5..12a1394 100644
--- a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/OrderServiceImpl.java
+++ b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/service/impl/OrderServiceImpl.java
@@ -195,10 +195,10 @@
.where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
city = null != weatherCity ? weatherCity.getId().toString() : "";
}
+ order.setCreateTime(new Date());
order = getOrderPrice(1, d, 0, order, city);
order.setState(null == order.getDriverId() ? 101 : 102);
order.setStatus(1);
- order.setCreateTime(new Date());
this.insert(order);
driverService.updateById(driver);
//推送状态
@@ -242,7 +242,7 @@
JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
JSONArray chargeStandard = jsonObject.getJSONArray("ChargeStandard");
JSONObject extraCost = jsonObject.getJSONObject("ExtraCost");
- Date date = new Date();
+ Date date = order.getCreateTime();
boolean b = true;
for (int i = 1; i < chargeStandard.size(); i++) {//各种时间段
@@ -257,18 +257,28 @@
Double num8 = jsonObject1.getDouble("num8");//超过num8每num10公里收取num11
String[] split = num1.split(":");
+ Integer hour1 = Integer.valueOf(split[0]);
Calendar s = Calendar.getInstance();
s.setTime(date);
- s.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
+ s.set(Calendar.HOUR_OF_DAY, hour1);
s.set(Calendar.MINUTE, Integer.valueOf(split[1]));
s.set(Calendar.SECOND, 0);
split = num2.split(":");
+ Integer hour2 = Integer.valueOf(split[0]);
Calendar e = Calendar.getInstance();
e.setTime(date);
- e.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
+ e.set(Calendar.HOUR_OF_DAY, hour2);
e.set(Calendar.MINUTE, Integer.valueOf(split[1]));
e.set(Calendar.SECOND, 0);
+
+ if(hour1 > hour2){
+ if(s.getTimeInMillis() > date.getTime()){
+ s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) - 1);
+ }else{
+ e.set(Calendar.DAY_OF_YEAR, e.get(Calendar.DAY_OF_YEAR) + 1);
+ }
+ }
if(date.getTime() >= s.getTimeInMillis() && date.getTime() < e.getTimeInMillis()){
b = false;
@@ -296,8 +306,8 @@
}
//计算长途里程超出的部分
if(distance.compareTo(num5) > 0){
- BigDecimal subtract1 = new BigDecimal(distance).subtract(new BigDecimal(num5));
- BigDecimal divide1 = subtract1.divide(new BigDecimal(num7), new MathContext(2, RoundingMode.HALF_EVEN));
+ BigDecimal subtract1 = new BigDecimal(distance).subtract(new BigDecimal(num5)).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ BigDecimal divide1 = subtract1.divide(new BigDecimal(num7), 2, BigDecimal.ROUND_HALF_EVEN);
BigDecimal multiply1 = divide1.multiply(new BigDecimal(num8));
order.setOverLongDistance(subtract1.doubleValue());//超出长途里程
order.setOverLongDistancePrice(multiply1.doubleValue());//超出长途里程费
@@ -340,8 +350,8 @@
}
//计算长途里程超出的部分
if(distance.compareTo(num5) > 0){
- BigDecimal subtract1 = new BigDecimal(distance).subtract(new BigDecimal(num5));
- BigDecimal divide1 = subtract1.divide(new BigDecimal(num7), new MathContext(2, RoundingMode.HALF_EVEN));
+ BigDecimal subtract1 = new BigDecimal(distance).subtract(new BigDecimal(num5)).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ BigDecimal divide1 = subtract1.divide(new BigDecimal(num7), 2, BigDecimal.ROUND_HALF_EVEN);
BigDecimal multiply1 = divide1.multiply(new BigDecimal(num8));
order.setOverLongDistance(subtract1.doubleValue());//超出长途里程
order.setOverLongDistancePrice(multiply1.doubleValue());//超出长途里程费
@@ -494,6 +504,10 @@
if(ToolUtil.isEmpty(value)){
continue;
}
+ DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", youTuiDriver.getDriverId()).eq("status", 1));
+ if(null == driverWork){
+ continue;
+ }
Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat());
Double wgs84 = distance.get("WGS84");
if(d == null || d.compareTo(wgs84) > 0){
@@ -535,6 +549,10 @@
Double score = null;
Double d = null;
for (Driver driver1 : drivers) {
+ DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", driver1.getId()).eq("status", 1));
+ if(null == driverWork){
+ continue;
+ }
if(integral == null || integral.compareTo(driver1.getIntegral()) < 0){//积分大
integral = driver1.getIntegral();
score = driver1.getScore();
@@ -942,6 +960,8 @@
accountChangeDetail.setUserType(2);
accountChangeDetail.setUserId(order.getDriverId());
accountChangeDetail.setType(2);
+ accountChangeDetail.setChangeType(5);
+ accountChangeDetail.setOrderId(order.getId());
accountChangeDetail.setOldData(driver.getIntegral().doubleValue());
driver.setIntegral(driver.getIntegral() + num5);
accountChangeDetail.setNewData(driver.getIntegral().doubleValue());
@@ -949,52 +969,35 @@
accountChangeDetailService.saveData(accountChangeDetail);
}
//恶劣天气完成订单奖励
- Integer num8 = JSON.parseObject(systemConfig.getContent()).getInteger("num8");
- if(num8 > 0){
- AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
- accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
- accountChangeDetail.setUserType(2);
- accountChangeDetail.setUserId(order.getDriverId());
- accountChangeDetail.setType(2);
- accountChangeDetail.setOldData(driver.getIntegral().doubleValue());
- driver.setIntegral(driver.getIntegral() + num8);
- accountChangeDetail.setNewData(driver.getIntegral().doubleValue());
- accountChangeDetail.setExplain("恶劣天气完成订单奖励");
- accountChangeDetailService.saveData(accountChangeDetail);
+ String city = "";
+ District geocode = MapUtil.geocode(order.getStartLng(), order.getStartLat());
+ if(null != geocode){
+ WeatherCity weatherCity = weatherCityService.selectOne(new EntityWrapper<WeatherCity>()
+ .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
+ city = null != weatherCity ? weatherCity.getId().toString() : "";
}
+ boolean badWeather = WeatherUtil.isBadWeather(city);
+ if(badWeather){
+ Integer num8 = JSON.parseObject(systemConfig.getContent()).getInteger("num8");
+ if(num8 > 0){
+ AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
+ accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
+ accountChangeDetail.setUserType(2);
+ accountChangeDetail.setUserId(order.getDriverId());
+ accountChangeDetail.setType(2);
+ accountChangeDetail.setOldData(driver.getIntegral().doubleValue());
+ driver.setIntegral(driver.getIntegral() + num8);
+ accountChangeDetail.setNewData(driver.getIntegral().doubleValue());
+ accountChangeDetail.setExplain("恶劣天气完成订单奖励");
+ accountChangeDetailService.saveData(accountChangeDetail);
+ }
+ }
+
driverService.updateById(driver);
if(null == order.getUserId()){
return;
}
- //推荐用户首单完成奖励
- Integer num4 = JSON.parseObject(systemConfig.getContent()).getInteger("num4");
- if(num4 > 0){
- List<Integer> state = Arrays.asList(105);
- int count = this.selectCount(new EntityWrapper<Order>().eq("userId", order.getUserId()).eq("status", 1).in("state", state));
- if(count > 1){
- return;
- }
- AppUser appUser = appUserService.selectById(order.getUserId());
- if(null != appUser && null != appUser.getInviterType()){
- if(appUser.getInviterType() == 1){
- return;
- }
- Driver driver1 = driverService.selectById(appUser.getInviterId());
- AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
- accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
- accountChangeDetail.setUserType(2);
- accountChangeDetail.setUserId(driver1.getId());
- accountChangeDetail.setType(2);
- accountChangeDetail.setOldData(driver1.getIntegral().doubleValue());
- driver1.setIntegral(driver1.getIntegral() + num4);
- accountChangeDetail.setNewData(driver1.getIntegral().doubleValue());
- accountChangeDetail.setExplain("推荐用户完成首单奖励");
- accountChangeDetailService.saveData(accountChangeDetail);
- driverService.updateById(driver1);
- }
- }
-
}
}
@@ -1292,7 +1295,7 @@
}
this.updateById(order);
- if(state == 108){//计算抽成
+ if(payType == 2 && state == 108){//计算抽成
saveRevenue(order);
}
@@ -1316,6 +1319,33 @@
//司机分佣和司机推荐用户首单奖励都在平台的抽佣中扣除,剩余的为平台抽佣。
Driver driver = driverService.selectById(order.getDriverId());
AppUser appUser = appUserService.selectById(order.getUserId());
+
+ //司机推荐首单收入
+ List<Integer> state = Arrays.asList(108, 109);
+ int count = this.selectCount(new EntityWrapper<Order>().eq("userId", order.getUserId()).eq("status", 1).in("state", state));
+ if(null != appUser.getInviterType() && appUser.getInviterType() == 2 && count == 1){
+ Driver driver1 = driverService.selectById(appUser.getInviterId());
+ //首单积分奖励
+ SystemConfig systemConfig1 = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 4));
+ JSONObject jsonObject2 = JSON.parseObject(systemConfig1.getContent());
+ Integer num4 = jsonObject2.getInteger("num4");
+ AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
+ accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
+ accountChangeDetail.setUserType(2);
+ accountChangeDetail.setUserId(driver1.getId());
+ accountChangeDetail.setType(2);
+ accountChangeDetail.setChangeType(5);
+ accountChangeDetail.setOrderId(order.getId());
+ accountChangeDetail.setOldData(driver1.getIntegral().doubleValue());
+ accountChangeDetail.setExplain("邀请用户首单积分奖励");
+ accountChangeDetail.setCreateTime(new Date());
+ driver1.setIntegral(driver1.getIntegral() + num4);
+ accountChangeDetail.setNewData(driver1.getIntegral().doubleValue());
+ accountChangeDetailService.insert(accountChangeDetail);
+ driverService.updateById(driver1);
+ }
+
+
Double payMoney = order.getPayMoney();
SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 3));
Double n = 0D;
@@ -1519,6 +1549,7 @@
}
//司机余额扣减抽佣金额
if(n > 0){
+ driver = driverService.selectById(order.getDriverId());
AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
accountChangeDetail.setUserType(2);
@@ -1632,6 +1663,10 @@
if(performanceRankingWarpper.getDriverId().compareTo(driverId) == 0){
break;
}
+ if(i == performanceRankingWarppers.size() - 1){
+ position = 0;
+ d = 0D;
+ }
}
MyAchievementWarpper myAchievementWarpper = new MyAchievementWarpper();
myAchievementWarpper.setType("订单");
@@ -1653,6 +1688,10 @@
}
if(performanceRankingWarpper.getDriverId().compareTo(driverId) == 0){
break;
+ }
+ if(i == performanceRankingWarppers.size() - 1){
+ position = 0;
+ d = 0D;
}
}
myAchievementWarpper = new MyAchievementWarpper();
@@ -1676,6 +1715,10 @@
if(performanceRankingWarpper.getDriverId().compareTo(driverId) == 0){
break;
}
+ if(i == performanceRankingWarppers.size() - 1){
+ position = 0;
+ d = 0D;
+ }
}
myAchievementWarpper = new MyAchievementWarpper();
myAchievementWarpper.setType("佣金");
@@ -1692,7 +1735,8 @@
*/
@Override
public void completeCollection() {
- List<Order> orders = this.selectList(new EntityWrapper<Order>().eq("state", 107).eq("status", 1).eq("payType", 3));
+ List<Order> orders = this.selectList(new EntityWrapper<Order>().eq("state", 107).eq("status", 1)
+ .eq("payType", 3).last(" and UNIX_TIMESTAMP(getoffTime) + 120 <= UNIX_TIMESTAMP(now())"));
for (Order order : orders) {
order.setState(108);
order.setPayTime(new Date());
diff --git a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/PayMoneyUtil.java b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/PayMoneyUtil.java
index 5eeefc7..8e88eff 100644
--- a/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/PayMoneyUtil.java
+++ b/driver/guns-admin/src/main/java/com/agentdriving/driver/modular/system/util/PayMoneyUtil.java
@@ -109,8 +109,8 @@
return ResultUtil.success(response.getBody());
} catch (AlipayApiException e) {
e.printStackTrace();
+ return ResultUtil.error("调起支付异常", "");
}
- return null;
}
@@ -335,8 +335,8 @@
if("SUCCESS".equals(result_code)){
Map<String, String> map1 = new HashedMap();
map1.put("nonce_str", map.get("nonce_str"));
- map1.put("out_trade_no", map.get("out_trade_no").split("_")[1]);//存储的订单code
- map1.put("attach", map.get("attach"));//存储订单id
+ map1.put("out_trade_no", map.get("out_trade_no"));
+ map1.put("attach", map.get("attach"));
map1.put("total_fee", map.get("total_fee"));
map1.put("transaction_id", map.get("transaction_id"));//微信支付订单号
String result = "<xml><return_code><![CDATA[SUCCESS]]></return_code><return_msg><![CDATA[OK]]></return_msg></xml>";
diff --git a/driver/guns-admin/src/main/resources/application.yml b/driver/guns-admin/src/main/resources/application.yml
index d2cf298..2a8e43d 100644
--- a/driver/guns-admin/src/main/resources/application.yml
+++ b/driver/guns-admin/src/main/resources/application.yml
@@ -2,7 +2,7 @@
port: 8007
guns:
- swagger-open: true #是否开启swagger (true/false)
+ swagger-open: false #是否开启swagger (true/false)
kaptcha-open: false #是否开启登录时验证码 (true/false)
# file-upload-path: d:/tmp #文件上传目录(不配置的话为java.io.tmpdir目录)
spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false)
@@ -101,9 +101,9 @@
#支付回调地址
#正式环境
-#callbackPath: https://okyueche.com:443/user
+callbackPath: https://fanghuatongxing.cn:443/driver
#测试环境
-callbackPath: http://139.9.238.199:80/driver
+#callbackPath: http://139.9.238.199:80/driver
---
diff --git a/driver/guns-admin/src/test/java/com/agentdriving/driver/GunsApplicationTest.java b/driver/guns-admin/src/test/java/com/agentdriving/driver/GunsApplicationTest.java
index 4e18e17..3d1979e 100644
--- a/driver/guns-admin/src/test/java/com/agentdriving/driver/GunsApplicationTest.java
+++ b/driver/guns-admin/src/test/java/com/agentdriving/driver/GunsApplicationTest.java
@@ -15,6 +15,10 @@
//import org.springframework.boot.test.context.SpringBootTest;
//import org.springframework.test.context.junit4.SpringRunner;
//
+//import java.text.SimpleDateFormat;
+//import java.util.Calendar;
+//import java.util.Date;
+//
//
//@RunWith(SpringRunner.class)
//@SpringBootTest
@@ -26,6 +30,17 @@
//
// @Test
// public void test() throws Exception {
-// PerformanceSummaryWarpper performanceSummaryWarpper = orderService.queryPerformanceSummary(1, 1, "2023年", 3);
+// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+// Integer hour1 = 11;
+// Calendar s = Calendar.getInstance();
+// s.setTime(new Date());
+// s.set(Calendar.HOUR_OF_DAY, hour1);
+// System.err.println(sdf.format(s.getTime()));
+//
+// Integer hour2 = 16;
+// Calendar e = Calendar.getInstance();
+// e.setTime(new Date());
+// e.set(Calendar.HOUR_OF_DAY, hour1 <= hour2 ? hour2 : hour2 + 24);
+// System.err.println(sdf.format(e.getTime()));
// }
//}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TOrderController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TOrderController.java
index 43f2a4c..b962d8e 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TOrderController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TOrderController.java
@@ -3,6 +3,7 @@
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.stylefeng.guns.core.base.controller.BaseController;
@@ -16,6 +17,7 @@
import com.stylefeng.guns.modular.system.model.TAppUser;
import com.stylefeng.guns.modular.system.model.TDriver;
import com.stylefeng.guns.modular.system.model.TOrder;
+import com.stylefeng.guns.modular.system.model.TOrderPosition;
import com.stylefeng.guns.modular.system.service.ITAppUserService;
import com.stylefeng.guns.modular.system.service.ITCancelOrderService;
import com.stylefeng.guns.modular.system.service.ITOrderService;
@@ -26,6 +28,7 @@
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
@@ -34,7 +37,7 @@
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletResponse;
-import java.io.OutputStream;
+import java.io.*;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
@@ -61,6 +64,9 @@
private ITAppUserService tAppUserService;
@Autowired
private ITCancelOrderService tCancelOrderService;
+
+ @Value("${filePath}")
+ private String filePath;
/**
* 跳转到首页
@@ -440,4 +446,34 @@
e.printStackTrace();
}
}
+
+
+ @RequestMapping(value = "/getOrderTrack")
+ @ResponseBody
+ public ResultUtil getOrderTrack(Integer orderDetailId){
+ if(ToolUtil.isNotEmpty(orderDetailId)){
+ try {
+ //将数据存储到文件中
+ File file = new File(filePath + orderDetailId + ".json");
+ if(!file.exists()){
+ return ResultUtil.success(new ArrayList<>());
+ }
+ //读取文件(字符流)
+ BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8"));
+ //循环取出数据
+ String str = null;
+ StringBuffer sb = new StringBuffer();
+ while ((str = in.readLine()) != null) {
+ sb.append(str);
+ }
+ List<TOrderPosition> list = JSONArray.parseArray(sb.toString(), TOrderPosition.class);
+ return ResultUtil.success(list);
+ }catch (Exception e){
+ e.printStackTrace();
+ return ResultUtil.runErr();
+ }
+ }else {
+ return ResultUtil.paranErr();
+ }
+ }
}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java
index c28a53c..1c19d87 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/LoginController.java
@@ -143,7 +143,7 @@
if(f==5){
model.addAttribute("number", "5");
}
- model.addAttribute("message","账号或密码错误!");
+ model.addAttribute("tips","账号或密码错误!");
return "/login.html";
}
}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/UserMgrController.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/UserMgrController.java
index 0e6227c..6a70bd6 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/UserMgrController.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/system/UserMgrController.java
@@ -252,11 +252,8 @@
user.setCreatetime(new Date());
User objectUser = UserFactory.createUser(user);
- //查找平台所属公司
- TCompany company = itCompanyService.selectOne(new EntityWrapper<TCompany>().eq("type", 1).orderBy("id", true).last(" limit 1"));
- if (SinataUtil.isNotEmpty(company)){
- objectUser.setObjectId(company.getId());
- }
+ Integer objectId = ShiroKit.getUser().getObjectId();
+ objectUser.setObjectId(objectId);
objectUser.setPassWordUpdate(new Date());
this.userService.insert(objectUser);
@@ -349,8 +346,6 @@
return SUCCESS_TIP;
}
- @Autowired
- private ITCompanyService itCompanyService;
/**
* 冻结用户
@@ -369,26 +364,6 @@
}
assertAuth(userId);
this.userService.setStatus(userId, ManagerStatus.FREEZED.getCode());
-
- User user = userService.selectById(userId);
- if (user.getRoleType() == 2){
- //查询分公司
- TCompany company = itCompanyService.selectById(user.getObjectId());
- company.setState(1);
- itCompanyService.updateById(company);
-
- //设置该分公司下的所有司机状态
-// itDriverService.updateCompanyDriverState(3,company.getId());
-
- }else if (user.getRoleType() == 3){
- //查询加盟商
- TCompany franchisee = itCompanyService.selectById(user.getObjectId());
- franchisee.setState(1);
- itCompanyService.updateById(franchisee);
-
- //设置该加盟商下的所有司机状态
-// itDriverService.updateFranchiseeDriverState(3,franchisee.getId());
- }
return SUCCESS_TIP;
}
@@ -405,26 +380,6 @@
}
assertAuth(userId);
this.userService.setStatus(userId, ManagerStatus.OK.getCode());
-
- User user = userService.selectById(userId);
- if (user.getRoleType() == 2){
- //查询分公司
- TCompany company = itCompanyService.selectById(user.getObjectId());
- company.setState(0);
- itCompanyService.updateById(company);
-
- //设置该分公司下的所有司机状态
-// itDriverService.updateCompanyDriverState(2,company.getId());
-
- }else if (user.getRoleType() == 3){
- //查询加盟商
- TCompany franchisee = itCompanyService.selectById(user.getObjectId());
- franchisee.setState(0);
- itCompanyService.updateById(franchisee);
-
- //设置该加盟商下的所有司机状态
-// itDriverService.updateFranchiseeDriverState(2,franchisee.getId());
- }
return SUCCESS_TIP;
}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/UploadUtil.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/UploadUtil.java
index 4003131..6a65ab2 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/UploadUtil.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/util/UploadUtil.java
@@ -29,7 +29,7 @@
* 上传文件
*/
@RestController
-@RequestMapping("/upload")
+@RequestMapping("/image")
public class UploadUtil extends BaseController {
private final static Logger log = LoggerFactory.getLogger(UploadUtil.class);
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriver.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriver.java
index 9434c9d..1135326 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriver.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/model/TDriver.java
@@ -188,6 +188,31 @@
@ApiModelProperty(value = "邀请人电话")
private String inviterPhone;
+ /**
+ * 商户号
+ */
+ @TableField("merchantNumber")
+ private String merchantNumber;
+ /**
+ * 商户姓名
+ */
+ @TableField("merchantName")
+ private String merchantName;
+ /**
+ * 商户电话
+ */
+ @TableField("merchantPhone")
+ private String merchantPhone;
+ /**
+ * 商户身份证号码
+ */
+ @TableField("merchantIDCode")
+ private String merchantIDCode;
+ /**
+ * 是否打开下单二维码
+ */
+ @TableField("openOrderQRCode")
+ private Integer openOrderQRCode;
public String getInviterName() {
return inviterName;
@@ -541,6 +566,46 @@
this.createTime = createTime;
}
+ public String getMerchantNumber() {
+ return merchantNumber;
+ }
+
+ public void setMerchantNumber(String merchantNumber) {
+ this.merchantNumber = merchantNumber;
+ }
+
+ public String getMerchantName() {
+ return merchantName;
+ }
+
+ public void setMerchantName(String merchantName) {
+ this.merchantName = merchantName;
+ }
+
+ public String getMerchantPhone() {
+ return merchantPhone;
+ }
+
+ public void setMerchantPhone(String merchantPhone) {
+ this.merchantPhone = merchantPhone;
+ }
+
+ public String getMerchantIDCode() {
+ return merchantIDCode;
+ }
+
+ public void setMerchantIDCode(String merchantIDCode) {
+ this.merchantIDCode = merchantIDCode;
+ }
+
+ public Integer getOpenOrderQRCode() {
+ return openOrderQRCode;
+ }
+
+ public void setOpenOrderQRCode(Integer openOrderQRCode) {
+ this.openOrderQRCode = openOrderQRCode;
+ }
+
@Override
protected Serializable pkVal() {
return this.id;
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java
index f42654e..2d71020 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java
@@ -93,6 +93,9 @@
@Autowired
private ITDriverWorkService driverWorkService;
+ @Autowired
+ private ITDriverService driverService;
+
@@ -115,6 +118,7 @@
public void orderDetail(Integer orderId, Model model) {
// 订单信息
TOrder tOrder = tOrderMapper.selectById(orderId);
+ model.addAttribute("id",orderId);
model.addAttribute("createTime",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(tOrder.getCreateTime()));//下单时间
model.addAttribute("code",tOrder.getCode());//订单编号
model.addAttribute("source",tOrder.getSource());//订单来源
@@ -463,10 +467,10 @@
.where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
city = null != weatherCity ? weatherCity.getId().toString() : "";
}
+ tOrder.setCreateTime(new Date());
tOrder = getOrderPrice(1, d, 0, tOrder, city);
tOrder.setState(101);
tOrder.setStatus(1);
- tOrder.setCreateTime(new Date());
this.insert(tOrder);
//推送状态
pushOrder(tOrder);
@@ -499,7 +503,7 @@
JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
JSONArray chargeStandard = jsonObject.getJSONArray("ChargeStandard");
JSONObject extraCost = jsonObject.getJSONObject("ExtraCost");
- Date date = new Date();
+ Date date = order.getCreateTime();
boolean b = true;
for (int i = 1; i < chargeStandard.size(); i++) {//各种时间段
@@ -514,18 +518,28 @@
Double num8 = jsonObject1.getDouble("num8");//超过num8每num10公里收取num11
String[] split = num1.split(":");
+ Integer hour1 = Integer.valueOf(split[0]);
Calendar s = Calendar.getInstance();
s.setTime(date);
- s.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
+ s.set(Calendar.HOUR_OF_DAY, hour1);
s.set(Calendar.MINUTE, Integer.valueOf(split[1]));
s.set(Calendar.SECOND, 0);
split = num2.split(":");
+ Integer hour2 = Integer.valueOf(split[0]);
Calendar e = Calendar.getInstance();
e.setTime(date);
- e.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
+ e.set(Calendar.HOUR_OF_DAY, hour2);
e.set(Calendar.MINUTE, Integer.valueOf(split[1]));
e.set(Calendar.SECOND, 0);
+
+ if(hour1 > hour2){
+ if(s.getTimeInMillis() > date.getTime()){
+ s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) - 1);
+ }else{
+ e.set(Calendar.DAY_OF_YEAR, e.get(Calendar.DAY_OF_YEAR) + 1);
+ }
+ }
if(date.getTime() >= s.getTimeInMillis() && date.getTime() < e.getTimeInMillis()){
b = false;
@@ -751,6 +765,14 @@
if(ToolUtil.isEmpty(value)){
continue;
}
+ TDriver driver1 = driverService.selectById(youTuiDriver.getDriverId());
+ if(driver1.getServerStatus() == 2 || driver1.getOpenOrderQRCode() == 1){
+ continue;
+ }
+ TDriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<TDriverWork>().eq("driverId", driver1.getId()).eq("status", 1));
+ if(null == driverWork){
+ continue;
+ }
Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat());
Double wgs84 = distance.get("WGS84");
if(d == null || d.compareTo(wgs84) > 0){
@@ -783,7 +805,8 @@
driverIds = locations.stream().map(Location::getDriverId).collect(Collectors.toList());
if(driverIds.size() > 0){
- List<TDriver> drivers = tDriverMapper.selectList(new EntityWrapper<TDriver>().eq("approvalStatus", 2).eq("serverStatus", 1).eq("status", 1).in("id", driverIds));
+ List<TDriver> drivers = driverService.selectList(new EntityWrapper<TDriver>().eq("approvalStatus", 2)
+ .eq("serverStatus", 1).eq("openOrderQRCode", 0).eq("status", 1).in("id", driverIds));
if(drivers.size() == 0){
continue;
}
@@ -792,27 +815,40 @@
Double score = null;
Double d = null;
for (TDriver driver1 : drivers) {
+ String value = redisUtil.getValue("DRIVER" + driver1.getId());
+ if(ToolUtil.isEmpty(value)){
+ continue;
+ }
+ TDriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<TDriverWork>().eq("driverId", driver1.getId()).eq("status", 1));
+ if(null == driverWork){
+ continue;
+ }
+
if(integral == null || integral.compareTo(driver1.getIntegral()) < 0){//积分大
integral = driver1.getIntegral();
score = driver1.getScore();
driver = driver1.getId();
+ Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat());
+ Double wgs84 = distance.get("WGS84");
+ d = wgs84;
continue;
}
if(integral.compareTo(driver1.getIntegral()) == 0 && score.compareTo(driver1.getScore()) < 0){//积分相同对比评分
integral = driver1.getIntegral();
score = driver1.getScore();
driver = driver1.getId();
+ Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat());
+ Double wgs84 = distance.get("WGS84");
+ d = wgs84;
continue;
}
if(integral.compareTo(driver1.getIntegral()) == 0 && score.compareTo(driver1.getScore()) == 0){//积分相同/评分相同对比距离
- String value = redisUtil.getValue("DRIVER" + driver1.getId());
- if(ToolUtil.isEmpty(value)){
- continue;
- }
Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat());
Double wgs84 = distance.get("WGS84");
- if(d == null || d.compareTo(wgs84) > 0){
+ if(d.compareTo(wgs84) > 0){
d = wgs84;
+ integral = driver1.getIntegral();
+ score = driver1.getScore();
driver = driver1.getId();
continue;
}
diff --git a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java
index 4bf4a0c..dee46eb 100644
--- a/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java
+++ b/management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/util/TaskUtil.java
@@ -55,7 +55,9 @@
userToCoupon.setExpireCount(validCount);
userToCoupon.setValidCount(0);
}
- userToCouponService.updateBatchById(collect2);
+ if(collect2.size() > 0){
+ userToCouponService.updateBatchById(collect2);
+ }
} catch (Exception e) {
e.printStackTrace();
}
diff --git a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tOrder/tOrderDetail.html b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tOrder/tOrderDetail.html
index 25f4c99..89cd456 100644
--- a/management/guns-admin/src/main/webapp/WEB-INF/view/system/tOrder/tOrderDetail.html
+++ b/management/guns-admin/src/main/webapp/WEB-INF/view/system/tOrder/tOrderDetail.html
@@ -9,6 +9,7 @@
<div class="row row-lg">
<div class="col-sm-12">
+ <input hidden id="id" value="${id}">
<input hidden id="startLng" value="${startLng}">
<input hidden id="startLat" value="${startLat}">
<input hidden id="endLng" value="${endLng}">
@@ -182,20 +183,28 @@
</div>
@}
- @if(startLng != null){
- <hr/>
- <div class="initialLevel col-sm-12 control-label form-group" >
- <div style="background-color: gray;height: 35px;line-height: 35px">
- <label style="color: #0C0C0C">行程轨迹</label>
+ <div class="row" style="margin-top: 30px;">
+ <div class="col-sm-4">
+ <h2 class="h3Class" style="font-weight: 700;">线路轨迹</h2>
+ </div>
+ </div>
+ <div class="row">
+ <div class="col-sm-10">
+ <div class="form-horizontal" id="container" style="margin-left: 50px;width: 100%; height: 500px;"></div>
+ <div class="input-card" style="margin-left: 50px;">
+ <h4>轨迹回放控制</h4>
+ <div class="input-item">
+ <input type="button" class="btn" value="开始动画" id="start" onclick="startAnimation()"/>
+ <input type="button" class="btn" value="暂停动画" id="pause" onclick="pauseAnimation()"/>
+ <input type="button" class="btn" value="继续动画" id="resume" onclick="resumeAnimation()"/>
+ <input type="button" class="btn" value="停止动画" id="stop" onclick="stopAnimation()"/>
+ </div>
+ <div class="input-item">
+
+ </div>
</div>
</div>
- <hr/>
-
- <div class="initialLevel col-sm-12 control-label form-group" >
- <div id="container" ></div>
- <div id="panel" ></div>
- </div>
- @}
+ </div>
<hr/>
<div class="initialLevel col-sm-12 control-label form-group" >
@@ -224,10 +233,9 @@
</div>
<script src="${ctxPath}/static/modular/system/tOrder/tOrder.js"></script>
<script src="${ctxPath}/static/modular/system/tOrder/tOrder_info.js"></script>
-
-<!--<script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=1d43098bcd98ab124623e7e4bcc9595e&plugin=AMap.Driving"></script>-->
-<!--<script type="text/javascript" src="https://a.amap.com/jsapi_demos/static/demo-center/js/demoutils.js"></script>-->
-<!--<script type="text/javascript" src="https://cache.amap.com/lbs/static/addToolbar.js"></script>-->
+<script src="https://a.amap.com/jsapi_demos/static/demo-center/js/demoutils.js"></script>
+<script src="https://webapi.amap.com/maps?v=1.4.15&key=86fcccf007b64ae97b01c3c982c0ef0f"></script>
+<script src="https://cache.amap.com/lbs/static/addToolbar.js"></script>
<script src="https://webapi.amap.com/loader.js"></script>
<style type="text/css">
@@ -269,46 +277,102 @@
type: 'date',
range: true
});
- if(null != $('#startLng').val() && '' != $('#startLng').val()){
- AMapLoader.reset() // 需要把这个reset一下
- AMapLoader.load({
- "key": "1d43098bcd98ab124623e7e4bcc9595e", // 申请好的Web端开发者Key,首次调用 load 时必填
- "version": "2.0", // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
- "plugins": ['AMap.Driving'], // 需要使用的的插件列表,如比例尺'AMap.Scale'等
- "AMapUI": { // 是否加载 AMapUI,缺省不加载
- "version": '1.1', // AMapUI 版本
- "plugins":['overlay/SimpleMarker'], // 需要加载的 AMapUI ui插件
+
+ var map = new AMap.Map("container", {
+ resizeEnable: true,
+ zoom: 14
+ });
+
+ $(function() {
+ getTrajectory();
+ });
+ function getTrajectory() {
+ $.ajax({
+ url: Feng.ctxPath + '/tOrder/getOrderTrack',
+ type: 'POST',
+ data:{
+ orderDetailId: $("#id").val()
},
- "Loca":{ // 是否加载 Loca, 缺省不加载
- "version": '2.0' // Loca 版本
- },
- }).then((AMap)=>{
- //初始化地图对象,加载地图
- var map = new AMap.Map('container', {
- viewMode: '2D', // 默认使用 2D 模式,如果希望使用带有俯仰角的 3D 模式,请设置 viewMode: '3D',
- zoom:13, //初始化地图层级
- center: [$('#startLng').val(), $('#startLat').val()] //初始化地图中心点
- });
- //构造路线导航类
- var driving = new AMap.Driving({
- map: map,
- });
- // 根据起终点经纬度规划驾车导航路线
- driving.search(new AMap.LngLat($('#startLng').val(), $('#startLat').val()), new AMap.LngLat($('#endLng').val(), $('#endLat').val()), function(status, result) {
- // result 即是对应的驾车导航信息,相关数据结构文档请参考 https://lbs.amap.com/api/javascript-api/reference/route-search#m_DrivingResult
- if (status === 'complete') {
- Feng.success('绘制订单路线完成')
- } else {
- Feng.error('获取驾车数据失败:' + result)
+ success: function (res) {
+ if(res.status == 200){
+ var data = res.data;
+ if(data.length > 0){
+ orderTrack(data);
+ }/*else{
+ Feng.error("当前订单没有轨迹");
+ }*/
+ }else{
+ Feng.error(res.msg);
}
- });
- }).catch((e)=>{
- console.error(e); //加载错误提示
+ }
});
- }else {
- Feng.info('该订单未完成,无地图路线显示!')
}
+ var marker, lineArr = [];
+
+ function orderTrack(data) {
+ for(var i in data){
+ var waypoints = [];
+ var lon = parseFloat(data[i].lon);
+ var lat = parseFloat(data[i].lat);
+ waypoints.push(lon);
+ waypoints.push(lat);
+ lineArr.push(waypoints);
+ }
+
+ marker = new AMap.Marker({
+ map: map,
+ position: lineArr[0],
+ icon: "https://webapi.amap.com/images/car.png",
+ offset: new AMap.Pixel(-26, -13),
+ autoRotation: true,
+ angle:-90,
+ });
+
+ // 绘制轨迹
+ var polyline = new AMap.Polyline({
+ map: map,
+ path: lineArr,
+ showDir:true,
+ strokeColor: "#28F", //线颜色
+ // strokeOpacity: 1, //线透明度
+ strokeWeight: 6, //线宽
+ // strokeStyle: "solid" //线样式
+ });
+
+ var passedPolyline = new AMap.Polyline({
+ map: map,
+ // path: lineArr,
+ strokeColor: "#AF5", //线颜色
+ // strokeOpacity: 1, //线透明度
+ strokeWeight: 6, //线宽
+ // strokeStyle: "solid" //线样式
+ });
+
+
+ marker.on('moving', function (e) {
+ passedPolyline.setPath(e.passedPath);
+ });
+
+ map.setFitView();
+ }
+
+
+ function startAnimation () {
+ marker.moveAlong(lineArr, 200);
+ }
+
+ function pauseAnimation () {
+ marker.pauseMove();
+ }
+
+ function resumeAnimation () {
+ marker.resumeMove();
+ }
+
+ function stopAnimation () {
+ marker.stopMove();
+ }
</script>
@}
diff --git a/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/auth/AuthIntercepter.java b/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/auth/AuthIntercepter.java
index c9eddfd..3c5125f 100644
--- a/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/auth/AuthIntercepter.java
+++ b/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/auth/AuthIntercepter.java
@@ -25,7 +25,7 @@
String appid = req.getParameter("appid");
String sign = req.getParameter("sign");
ResultUtil resultUtil = authService.checkSyncAuth(appid, sign, req);
- if (resultUtil.getCode() != 200) {
+ if (resultUtil.getCode() != 10000) {
res.setStatus(HttpStatus.OK.value());
res.setHeader("Content-type", "text/html;charset=UTF-8");
res.getWriter().print(JSON.toJSONString(resultUtil));//Res.Failure("req timeout, please try again")
diff --git a/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/service/IOrderService.java b/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/service/IOrderService.java
index 9e4a477..f4f994c 100644
--- a/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/service/IOrderService.java
+++ b/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/service/IOrderService.java
@@ -151,5 +151,5 @@
*/
List<OrderListWarpper> queryNotInvoiceOrder(Integer uid, NotInvoiceOrder notInvoiceOrder) throws Exception;
-
+ Order getOrderPrice(Integer type, Double distance, Integer waitTime, Order order, String city);
}
diff --git a/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/service/impl/OrderServiceImpl.java b/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/service/impl/OrderServiceImpl.java
index 2dc4530..ad3f375 100644
--- a/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/service/impl/OrderServiceImpl.java
+++ b/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/service/impl/OrderServiceImpl.java
@@ -32,6 +32,7 @@
import java.math.BigDecimal;
import java.math.MathContext;
import java.math.RoundingMode;
+import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.*;
import java.util.stream.Collectors;
@@ -130,7 +131,9 @@
.where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') "));
city = null != weatherCity ? weatherCity.getId().toString() : "";
}
- Order order = getOrderPrice(1, d, 0, new Order(), city);
+ Order order1 = new Order();
+ order1.setCreateTime(new Date());
+ Order order = getOrderPrice(1, d, 0, order1, city);
Double estimatedPrice = order.getEstimatedPrice();
Coupon coupon = userToCouponService.queryCoupon(uid, estimatedPrice);
if(null != coupon){
@@ -196,7 +199,7 @@
JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
JSONArray chargeStandard = jsonObject.getJSONArray("ChargeStandard");
JSONObject extraCost = jsonObject.getJSONObject("ExtraCost");
- Date date = new Date();
+ Date date = order.getCreateTime();
boolean b = true;
for (int i = 1; i < chargeStandard.size(); i++) {//各种时间段
@@ -211,18 +214,29 @@
Double num8 = jsonObject1.getDouble("num8");//超过num8每num10公里收取num11
String[] split = num1.split(":");
+ Integer hour1 = Integer.valueOf(split[0]);
+ String[] split1 = num2.split(":");
+ Integer hour2 = Integer.valueOf(split1[0]);
+
Calendar s = Calendar.getInstance();
s.setTime(date);
- s.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
+ s.set(Calendar.HOUR_OF_DAY, hour1);
s.set(Calendar.MINUTE, Integer.valueOf(split[1]));
s.set(Calendar.SECOND, 0);
- split = num2.split(":");
Calendar e = Calendar.getInstance();
e.setTime(date);
- e.set(Calendar.HOUR_OF_DAY, Integer.valueOf(split[0]));
- e.set(Calendar.MINUTE, Integer.valueOf(split[1]));
+ e.set(Calendar.HOUR_OF_DAY, hour2);
+ e.set(Calendar.MINUTE, Integer.valueOf(split1[1]));
e.set(Calendar.SECOND, 0);
+
+ if(hour1 > hour2){
+ if(s.getTimeInMillis() > date.getTime()){
+ s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) - 1);
+ }else{
+ e.set(Calendar.DAY_OF_YEAR, e.get(Calendar.DAY_OF_YEAR) + 1);
+ }
+ }
if(date.getTime() >= s.getTimeInMillis() && date.getTime() < e.getTimeInMillis()){
b = false;
@@ -248,8 +262,8 @@
}
//计算长途里程超出的部分
if(distance.compareTo(num5) > 0){
- BigDecimal subtract1 = new BigDecimal(distance).subtract(new BigDecimal(num5));
- BigDecimal divide1 = subtract1.divide(new BigDecimal(num7), new MathContext(2, RoundingMode.HALF_EVEN));
+ BigDecimal subtract1 = new BigDecimal(distance).subtract(new BigDecimal(num5)).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ BigDecimal divide1 = subtract1.divide(new BigDecimal(num7), 2, BigDecimal.ROUND_HALF_EVEN);
BigDecimal multiply1 = divide1.multiply(new BigDecimal(num8));
order.setOverLongDistance(subtract1.doubleValue());//超出长途里程
order.setOverLongDistancePrice(multiply1.doubleValue());//超出长途里程费
@@ -288,8 +302,8 @@
}
//计算长途里程超出的部分
if(distance.compareTo(num5) > 0){
- BigDecimal subtract1 = new BigDecimal(distance).subtract(new BigDecimal(num5));
- BigDecimal divide1 = subtract1.divide(new BigDecimal(num7), new MathContext(2, RoundingMode.HALF_EVEN));
+ BigDecimal subtract1 = new BigDecimal(distance).subtract(new BigDecimal(num5)).setScale(2, BigDecimal.ROUND_HALF_EVEN);
+ BigDecimal divide1 = subtract1.divide(new BigDecimal(num7), 2, BigDecimal.ROUND_HALF_EVEN);
BigDecimal multiply1 = divide1.multiply(new BigDecimal(num8));
order.setOverLongDistance(subtract1.doubleValue());//超出长途里程
order.setOverLongDistancePrice(multiply1.doubleValue());//超出长途里程费
@@ -362,6 +376,42 @@
}
return order;
}
+
+
+ public static void main(String[] ages){
+ SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+ Integer hour1 = 22;
+ Integer hour2 = 06;
+
+ Date date = null;
+ try {
+ date = sdf.parse("2023-06-12 23:26:50");
+ } catch (ParseException e) {
+ e.printStackTrace();
+ }
+ Calendar s = Calendar.getInstance();
+ s.setTime(date);
+ s.set(Calendar.HOUR_OF_DAY, hour1);
+ s.set(Calendar.MINUTE, 0);
+ s.set(Calendar.SECOND, 0);
+ Calendar e = Calendar.getInstance();
+ e.setTime(date);
+ e.set(Calendar.HOUR_OF_DAY, hour2);
+ e.set(Calendar.MINUTE, 0);
+ e.set(Calendar.SECOND, 0);
+ if(hour1 > hour2){
+ if(s.getTimeInMillis() > date.getTime()){
+ s.set(Calendar.DAY_OF_YEAR, s.get(Calendar.DAY_OF_YEAR) - 1);
+ }else{
+ e.set(Calendar.DAY_OF_YEAR, e.get(Calendar.DAY_OF_YEAR) + 1);
+ }
+
+ }
+
+ System.err.println("开始时间:" + sdf.format(s.getTime()));
+ System.err.println("结束时间:" + sdf.format(e.getTime()));
+ }
+
@@ -551,6 +601,10 @@
if(driver1.getServerStatus() == 2 || driver1.getOpenOrderQRCode() == 1){
continue;
}
+ DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", driver1.getId()).eq("status", 1));
+ if(null == driverWork){
+ continue;
+ }
Map<String, Double> distance = GeodesyUtil.getDistance(value, order.getStartLng() + "," + order.getStartLat());
Double wgs84 = distance.get("WGS84");
if(d == null || d.compareTo(wgs84) > 0){
@@ -597,6 +651,10 @@
for (Driver driver1 : drivers) {
String value = redisUtil.getValue("DRIVER" + driver1.getId());
if(ToolUtil.isEmpty(value)){
+ continue;
+ }
+ DriverWork driverWork = driverWorkService.selectOne(new EntityWrapper<DriverWork>().eq("driverId", driver1.getId()).eq("status", 1));
+ if(null == driverWork){
continue;
}
if(integral == null || integral.compareTo(driver1.getIntegral()) < 0){//积分大
@@ -1340,7 +1398,7 @@
if(null != systemConfig){
//{"num1":"10:00","num2":"14:00","num3":10,"num4":10,"num5":10,"num6":10,"num7":10,"num8":10,"num9":5,"num10":5}
JSONObject jsonObject = JSON.parseObject(systemConfig.getContent());
- Integer num5 = jsonObject.getInteger("num5");
+ Integer num6 = jsonObject.getInteger("num6");
//增加积分变动记录
AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
@@ -1351,7 +1409,7 @@
accountChangeDetail.setOldData(driver.getIntegral().doubleValue());
accountChangeDetail.setType(2);
accountChangeDetail.setExplain("代驾5星好评");
- driver.setIntegral(driver.getIntegral() + num5);
+ driver.setIntegral(driver.getIntegral() + num6);
accountChangeDetail.setNewData(driver.getIntegral().doubleValue());
accountChangeDetailService.insert(accountChangeDetail);
}
@@ -1390,9 +1448,35 @@
*/
public void saveCommission(Order order) throws Exception{
//司机收入和代理商抽成(先分佣,后抽成)
- //司机分佣和司机推荐用户首单奖励都在平台的抽佣中扣除,剩余的为平台抽佣。
Driver driver = driverService.selectById(order.getDriverId());
AppUser appUser = appUserService.selectById(order.getUserId());
+
+ //首单积分奖励
+ //司机推荐首单收入
+ List<Integer> state = Arrays.asList(108, 109);
+ int count = this.selectCount(new EntityWrapper<Order>().eq("userId", appUser.getId()).eq("status", 1).in("state", state));
+ if(null != appUser.getInviterType() && appUser.getInviterType() == 2 && count == 1){
+ Driver driver1 = driverService.selectById(appUser.getInviterId());
+ SystemConfig systemConfig1 = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 4));
+ JSONObject jsonObject2 = JSON.parseObject(systemConfig1.getContent());
+ Integer num4 = jsonObject2.getInteger("num4");
+ AccountChangeDetail accountChangeDetail = new AccountChangeDetail();
+ accountChangeDetail.setCode(System.currentTimeMillis() + UUIDUtil.getNumberRandom(3));
+ accountChangeDetail.setUserType(2);
+ accountChangeDetail.setUserId(driver1.getId());
+ accountChangeDetail.setType(2);
+ accountChangeDetail.setChangeType(5);
+ accountChangeDetail.setOrderId(order.getId());
+ accountChangeDetail.setOldData(driver1.getIntegral().doubleValue());
+ accountChangeDetail.setExplain("邀请用户首单积分奖励");
+ accountChangeDetail.setCreateTime(new Date());
+ driver1.setIntegral(driver1.getIntegral() + num4);
+ accountChangeDetail.setNewData(driver1.getIntegral().doubleValue());
+ accountChangeDetailService.insert(accountChangeDetail);
+ driverService.updateById(driver1);
+ }
+
+
Double payMoney = order.getPayMoney();
SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 3));
if(null != systemConfig){
@@ -1594,6 +1678,7 @@
}
}
//司机订单收入
+ driver = driverService.selectById(order.getDriverId());
Revenue revenue = new Revenue();
revenue.setType(1);
revenue.setUserType(2);
diff --git a/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/service/impl/SystemConfigServiceImpl.java b/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/service/impl/SystemConfigServiceImpl.java
index bbb9991..bbda7c2 100644
--- a/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/service/impl/SystemConfigServiceImpl.java
+++ b/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/service/impl/SystemConfigServiceImpl.java
@@ -95,7 +95,13 @@
Map<String, Object> map = new HashMap<>();
map.put("waitTime", num1 + "分钟/" + num2 + "元");
map.put("exceedWaitTime", "超出" + num3 + "分钟,收取" + num4 + "元/分钟");
- map.put("badWeather", num5 + "公里内加收" + num6 + "元,超过" + num7 + "公里按照订单单价的" + num8 + "倍计费,最高收取" + num9 + "元");
+ map.put("badWeather", "");
+ systemConfig = this.selectOne(new EntityWrapper<SystemConfig>().eq("type", 8));
+ JSONObject jsonObject1 = JSON.parseObject(systemConfig.getContent());
+ Integer num11 = jsonObject1.getInteger("num1");//开启恶劣天气计价
+ if(1 == num11){
+ map.put("badWeather", num5 + "公里内加收" + num6 + "元,超过" + num7 + "公里按照订单单价的" + num8 + "倍计费,最高收取" + num9 + "元");
+ }
priceRulesWarpper.setAdditionalFee(JSON.toJSONString(map));
}
return priceRulesWarpper;
diff --git a/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/util/PayMoneyUtil.java b/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/util/PayMoneyUtil.java
index 1015904..8a77e45 100644
--- a/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/util/PayMoneyUtil.java
+++ b/user/guns-admin/src/main/java/com/agentdriving/user/modular/system/util/PayMoneyUtil.java
@@ -423,7 +423,7 @@
if("SUCCESS".equals(result_code)){
Map<String, String> map1 = new HashedMap();
map1.put("nonce_str", map.get("nonce_str"));
- map1.put("out_trade_no", map.get("out_trade_no"));//存储的订单code
+ map1.put("out_trade_no", map.get("out_trade_no"));
map1.put("attach", map.get("attach"));//存储订单id
map1.put("total_fee", map.get("total_fee"));
map1.put("transaction_id", map.get("transaction_id"));//微信支付订单号
diff --git a/user/guns-admin/src/main/resources/application.yml b/user/guns-admin/src/main/resources/application.yml
index d090225..8eddb5d 100644
--- a/user/guns-admin/src/main/resources/application.yml
+++ b/user/guns-admin/src/main/resources/application.yml
@@ -2,7 +2,7 @@
port: 8006
guns:
- swagger-open: true #是否开启swagger (true/false)
+ swagger-open: false #是否开启swagger (true/false)
kaptcha-open: false #是否开启登录时验证码 (true/false)
# file-upload-path: d:/tmp #文件上传目录(不配置的话为java.io.tmpdir目录)
spring-session-open: false #是否开启spring session,如果是多机环境需要开启(true/false)
@@ -108,9 +108,9 @@
#支付回调地址
#正式环境
-#callbackPath: http://121.37.15.157:80/user
+callbackPath: https://fanghuatongxing.cn:443/user
#正式测试环境
-callbackPath: http://139.9.238.199:80/user
+#callbackPath: http://139.9.238.199:80/user
---
diff --git a/user/guns-admin/src/test/java/com/agentdriving/user/GunsApplicationTest.java b/user/guns-admin/src/test/java/com/agentdriving/user/GunsApplicationTest.java
new file mode 100644
index 0000000..9f0e4cd
--- /dev/null
+++ b/user/guns-admin/src/test/java/com/agentdriving/user/GunsApplicationTest.java
@@ -0,0 +1,28 @@
+//package com.agentdriving.user;
+//
+//import com.agentdriving.user.modular.system.model.Order;
+//import com.agentdriving.user.modular.system.service.IOrderService;
+//import org.junit.Test;
+//import org.junit.runner.RunWith;
+//import org.springframework.beans.factory.annotation.Autowired;
+//import org.springframework.boot.test.context.SpringBootTest;
+//import org.springframework.test.context.junit4.SpringRunner;
+//
+///**
+// * @author zhibing.pu
+// * @date 2023/6/8 14:36
+// */
+//@RunWith(SpringRunner.class)
+//@SpringBootTest
+//public class GunsApplicationTest {
+//
+// @Autowired
+// private IOrderService orderService;
+//
+// @Test
+// public void test(){
+// Order order1 = orderService.selectById(2067);
+// Order order = orderService.getOrderPrice(1, 11.793, 0, order1, null);
+// System.err.println(order);
+// }
+//}
--
Gitblit v1.7.1