driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/model/Driver.java
@@ -257,4 +257,9 @@ */ @TableField("merchantIDCode") private String merchantIDCode; /** * 司机推荐二维码 */ @TableField("referralCode") private String referralCode; } driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/IOrderService.java
@@ -38,7 +38,7 @@ */ ResultUtil driverAddOrder(Integer uid, AddOrderWarpper addOrderWarpper) throws Exception; Order getOrderPrice(Integer type, Double distance, Integer waitTime, Order order, String city); Order getOrderPrice(Integer type, Double distance, Integer waitTime, Order order, String city) throws Exception; /** * 获取大厅订单列表 * @param uid driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/DriverServiceImpl.java
@@ -15,6 +15,7 @@ import com.supersavedriving.driver.modular.system.util.*; import com.supersavedriving.driver.modular.system.util.MallBook.model.*; import com.supersavedriving.driver.modular.system.util.MallBook.util.TrhRequest; import com.supersavedriving.driver.modular.system.util.huawei.OBSUtil; import com.supersavedriving.driver.modular.system.util.mongodb.model.Location; import com.supersavedriving.driver.modular.system.util.rongyun.RongYunUtil; import com.supersavedriving.driver.modular.system.util.weChat.WeChatUtil; @@ -41,6 +42,7 @@ import org.springframework.web.context.request.ServletRequestAttributes; import javax.servlet.http.HttpServletRequest; import java.io.InputStream; import java.math.BigDecimal; import java.math.RoundingMode; import java.net.InetAddress; @@ -159,6 +161,10 @@ } driver.setCreateTime(new Date()); this.insert(driver); String s = wechatMiniProgramORCode(driver.getId()); driver.setReferralCode(s); this.updateById(driver); //司机邀请注册奖励 if(null != driver.getInviterId()){ @@ -187,6 +193,16 @@ } //生成小程序二维码 public String wechatMiniProgramORCode(Integer driverId) throws Exception{ InputStream release = weChatUtil.getwxacodeunlimit("pages/index/index", "driverId=" + driverId, "release"); String s = OBSUtil.putObjectToBucket(release, "driver_" + driverId + ".jpg"); return s; } /** * 组装个人信息 * @param driver @@ -195,6 +211,7 @@ */ public Driver setDriverParamete(Driver driver, DriverRegisterWarpper driverRegisterWarpper) throws Exception{ driver.setAvatar(driverRegisterWarpper.getAvatar()); driver.setName(driverRegisterWarpper.getName()); driver.setPhone(driverRegisterWarpper.getPhone()); driver.setEmergencyContact(driverRegisterWarpper.getEmergencyContact()); driver.setEmergencyPhone(driverRegisterWarpper.getEmergencyPhone()); @@ -287,6 +304,11 @@ } } if(ToolUtil.isEmpty(driver.getReferralCode())){ String s = wechatMiniProgramORCode(driver.getId()); driver.setReferralCode(s); this.updateById(driver); } return ResultUtil.success(tokenWarpper); } @@ -537,13 +559,19 @@ @Override public PromotionWarpper queryPromotionQRCode(Integer uid) throws Exception { PromotionWarpper promotionWarpper = new PromotionWarpper(); promotionWarpper.setUrl("https://chaoshengdaijia.com/share/driverShare/index.html?inviterId=" + uid); Driver driver1 = this.selectById(uid); if(ToolUtil.isEmpty(driver1.getReferralCode())){ String s = wechatMiniProgramORCode(driver1.getId()); driver1.setReferralCode(s); this.updateById(driver1); } // promotionWarpper.setUrl("https://chaoshengdaijia.com/share/driverShare/index.html?inviterId=" + uid); promotionWarpper.setUrl(driver1.getReferralCode()); int user = appUserService.selectCount(new EntityWrapper<AppUser>().eq("inviterType", 2).eq("inviterId", uid).eq("status", 1)); int driver = this.selectCount(new EntityWrapper<Driver>().eq("inviterType", 2).eq("inviterId", uid).eq("approvalStatus", 2).eq("status", 1)); promotionWarpper.setTotal(user + driver); promotionWarpper.setUser(user); promotionWarpper.setDriver(driver); Driver driver1 = this.selectById(uid); promotionWarpper.setAvatar(driver1.getAvatar()); promotionWarpper.setName(driver1.getName()); return promotionWarpper; driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderPositionServiceImpl.java
@@ -48,7 +48,11 @@ @Override public void saveOrderPosition(DriverPositionWarpper driverPositionWarpper) throws Exception { Integer orderId = driverPositionWarpper.getOrderId(); Integer driverId = driverPositionWarpper.getDriverId(); Order order = orderService.selectById(orderId); if(null == order.getDriverId() || order.getDriverId().compareTo(driverId) != 0){ return; } if(order.getState() != 105 && order.getState() != 401){ return; } @@ -136,7 +140,7 @@ } } if(50 >= wgs84 && 3 <= (null == num ? 0 : num)){//20秒(5秒上传一次数据) if(50 >= wgs84 && 6 <= (null == num ? 0 : num)){//30秒(5秒上传一次数据) Integer integer = map.get(order.getId().toString()); map.put(order.getId().toString(), null == integer ? 0 : integer + 1); //进入等待状态 @@ -152,7 +156,7 @@ e.printStackTrace(); } } if(50 >= wgs84 && 3 > (null == num ? 0 : num)){ if(50 >= wgs84 && 6 > (null == num ? 0 : num)){ Integer integer = map.get(order.getId().toString()); map.put(order.getId().toString(), null == integer ? 0 : integer + 1); } driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/service/impl/OrderServiceImpl.java
@@ -247,7 +247,7 @@ * @param city 查询天气的城市 * @return */ public Order getOrderPrice(Integer type, Double distance, Integer waitTime, Order order, String city){ public Order getOrderPrice(Integer type, Double distance, Integer waitTime, Order order, String city) throws Exception{ order = getOrderInitialPrice(order); SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 5)); if(null == systemConfig){ @@ -360,6 +360,9 @@ BigDecimal multiply = new BigDecimal(w).divide(new BigDecimal(60), 0, RoundingMode.UP).multiply(new BigDecimal(num4)); order.setOutWaitTime(w);//等待时长超出分钟 order.setOutWaitTimePrice(multiply.doubleValue());//等待时长超出费用 }else{ order.setWaitTime(waitTime);//等待时长 order.setWaitTimePrice(num2);//等待费用 } //恶劣天气 @@ -456,12 +459,12 @@ * 合适司:积分 > 评分 > 距离 * 3.司机没有接单直接将订单置入大厅 */ boolean lock = redisUtil.lock(5); boolean lock = redisUtil.lock(orderId.toString(), 5); if(!lock){ int num1 = 1; while (num1 <= 10){ Thread.sleep(3000);//等待3秒 lock = redisUtil.lock(5); lock = redisUtil.lock(orderId.toString(),5); if(lock){ break; }else{ @@ -473,11 +476,12 @@ order.setHallOrder(1); this.updateById(order); ExtraPushOrder(order); redisUtil.unlock(); redisUtil.unlock(orderId.toString()); return; } SystemConfig systemConfig = systemConfigService.selectOne(new EntityWrapper<SystemConfig>().eq("type", 1)); if(null == systemConfig){ redisUtil.unlock(); redisUtil.unlock(orderId.toString()); return; } JSONObject jsonObject = JSON.parseObject(systemConfig.getContent()); @@ -640,10 +644,10 @@ this.updateById(order); ExtraPushOrder(order); } redisUtil.unlock(); redisUtil.unlock(orderId.toString()); }catch (Exception e){ e.printStackTrace(); redisUtil.unlock(); redisUtil.unlock(orderId.toString()); } } @@ -796,12 +800,12 @@ if(count > 0){ return ResultUtil.error("还有未完成的订单"); } boolean lock = redisUtil.lock(5); boolean lock = redisUtil.lock(orderId.toString(), 5); if(!lock){ int num1 = 1; while (num1 <= 10){ Thread.sleep(3000);//等待3秒 lock = redisUtil.lock(5); lock = redisUtil.lock(orderId.toString(),5); if(lock){ break; }else{ @@ -810,17 +814,18 @@ } } if(!lock){ redisUtil.unlock(orderId.toString()); return ResultUtil.error("请重试"); } Order order = this.selectById(orderId); Integer state = order.getState(); Integer oldDriverId = order.getDriverId(); if(state == 301){ redisUtil.unlock(); redisUtil.unlock(orderId.toString()); return ResultUtil.error("订单已被取消"); } if(state != 101 && state != 201){ redisUtil.unlock(); redisUtil.unlock(orderId.toString()); return ResultUtil.error("手速慢了哦"); } order.setDriverId(uid); @@ -829,7 +834,7 @@ order.setState(102); order.setOrderTakingTime(new Date()); this.updateById(order); redisUtil.unlock(); redisUtil.unlock(orderId.toString()); if(null != order.getUserId()){ AppUser appUser = appUserService.selectById(order.getUserId()); @@ -869,9 +874,10 @@ orderTransfer.setSuccessTime(new Date()); orderTransferService.insert(orderTransfer); } pushUtil.pushTransferSuccessful(order.getUserId(), 1, order.getId()); pushUtil.pushTransferSuccessful(oldDriverId, 2, order.getId()); if(null != order.getUserId()){ pushUtil.pushTransferSuccessful(order.getUserId(), 1, order.getId()); } } //推动订单数据 @@ -884,7 +890,7 @@ pushUtil.pushOrderStatus(order.getUserId(), 1, order.getId(), order.getState()); } }catch (Exception e){ redisUtil.unlock(); redisUtil.unlock(orderId.toString()); e.printStackTrace(); throw e; } @@ -933,6 +939,7 @@ Map<String, String> distance1 = MapUtil.getDistance(orderInfoWarpper.getStartLng() + "," + orderInfoWarpper.getStartLat(), value, 0); orderInfoWarpper.setPickUpTime(Integer.valueOf(distance1.get("duration")) / 60); } orderInfoWarpper.setDriverId(order.getDriverId()); return orderInfoWarpper; } @@ -1000,7 +1007,12 @@ .where("'" + geocode.getCity() + "' like CONCAT('%', city, '%') and '" + geocode.getDistrict() + "' like CONCAT('%', district, '%') ")); city = null != weatherCity ? weatherCity.getId().toString() : ""; } order = getOrderPrice(2, Double.valueOf(order.getActualMileage()) / 1000, order.getWaitTime(), order, city); try { order = getOrderPrice(2, Double.valueOf(order.getActualMileage()) / 1000, order.getWaitTime(), order, city); }catch (Exception e){ e.printStackTrace(); return ResultUtil.error("计算费用异常"); } Coupon coupon = userToCouponService.queryCoupon(order.getUserId(), order.getOrderMoney()); if(null != coupon){ order.setCouponId(coupon.getId()); @@ -1013,10 +1025,6 @@ order.setPayMoney(order.getOrderMoney()); } //修改司机状态和积分 Driver driver = driverService.selectById(order.getDriverId()); driver.setServerStatus(1); driverService.updateById(driver); saveIntegral(order); redisUtil.delSetValue("orderService", order.getId().toString()); break; @@ -1257,6 +1265,9 @@ @Override public ResultUtil driverCancelOrder(Integer uid, Long orderId, String cause) throws Exception { Order order = this.selectById(orderId); if(null == order){ return ResultUtil.error("订单数据异常"); } if(uid.compareTo(order.getDriverId()) != 0){ return ResultUtil.error("无法取消订单"); } @@ -1310,11 +1321,13 @@ orderPriceWarpper.setOverDriveDistance(order.getOverDriveDistance()); orderPriceWarpper.setMileageFee(order.getOverDrivePrice()); }else{ String[] split = order.getLongDistance().split("-"); orderPriceWarpper.setStartPrice(order.getLongDistancePrice()); orderPriceWarpper.setStartDistance(Double.valueOf(split[1])); orderPriceWarpper.setOverDriveDistance(order.getOverLongDistance()); orderPriceWarpper.setMileageFee(order.getOverLongDistancePrice()); if(order.getLongDistance().indexOf("-") >= 0){ String[] split = order.getLongDistance().split("-"); orderPriceWarpper.setStartPrice(order.getLongDistancePrice()); orderPriceWarpper.setStartDistance(Double.valueOf(split[1])); orderPriceWarpper.setOverDriveDistance(order.getOverLongDistance()); orderPriceWarpper.setMileageFee(order.getOverLongDistancePrice()); } } Integer waitTime = order.getWaitTime() + order.getOutWaitTime(); Integer s = waitTime % 60; @@ -1430,6 +1443,13 @@ } this.updateById(order); if((payType == 1 && state == 107) || (payType == 2 && state == 108)){ //修改司机状态和积分 Driver driver = driverService.selectById(order.getDriverId()); driver.setServerStatus(1); driverService.updateById(driver); } if(payType == 2 && state == 108){//计算抽成 saveRevenue(order); } driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/util/RedisUtil.java
@@ -188,7 +188,6 @@ timer.schedule(new TimerTask() { @Override public void run() { System.err.println("定时任务启动"); Jedis resource = jedisPool.getResource(); resource.setex(finalKey, time, value); resource.close(); driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/DriverRegisterWarpper.java
@@ -14,8 +14,10 @@ public class DriverRegisterWarpper { @ApiModelProperty(value = "注册区域code", required = true, dataType = "string") private String code; @ApiModelProperty(value = "头像", required = true, dataType = "string") @ApiModelProperty(value = "头像", required = false, dataType = "string") private String avatar; @ApiModelProperty(value = "姓名", required = false, dataType = "string") private String name; @ApiModelProperty(value = "手机号码", required = true, dataType = "string") private String phone; @ApiModelProperty(value = "紧急联系人", required = true, dataType = "string") driver/guns-admin/src/main/java/com/supersavedriving/driver/modular/system/warpper/OrderInfoWarpper.java
@@ -17,6 +17,8 @@ private String userName; @ApiModelProperty("用户电话") private String userPhone; @ApiModelProperty("司机id") private Integer driverId; @ApiModelProperty("用户余额") private Double balance; @ApiModelProperty("下单次数")