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