package com.stylefeng.guns.modular.specialTrain.server.impl; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.stylefeng.guns.core.util.ToolUtil; import com.stylefeng.guns.modular.crossCity.dao.OrderCrossCityMapper; import com.stylefeng.guns.modular.crossCity.model.OrderCrossCity; import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService; import com.stylefeng.guns.modular.crossCity.server.impl.OrderCrossCityServiceImpl; import com.stylefeng.guns.modular.specialTrain.dao.OrderPrivateCarMapper; import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar; import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService; import com.stylefeng.guns.modular.system.dao.*; import com.stylefeng.guns.modular.system.model.*; import com.stylefeng.guns.modular.system.service.*; import com.stylefeng.guns.modular.system.util.*; import com.stylefeng.guns.modular.system.warpper.BaseWarpper; import com.stylefeng.guns.modular.system.warpper.EndPushWarpper; import com.stylefeng.guns.modular.system.warpper.OrderServerWarpper; import com.stylefeng.guns.modular.taxi.dao.OrderTaxiMapper; import com.stylefeng.guns.modular.taxi.model.OrderTaxi; import com.stylefeng.guns.modular.taxi.model.PaymentRecord; import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService; import com.stylefeng.guns.modular.taxi.service.IPaymentRecordService; import com.stylefeng.guns.modular.taxi.service.ITransactionDetailsService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.http.HttpEntity; import org.springframework.http.HttpHeaders; import org.springframework.http.MediaType; import org.springframework.stereotype.Service; import org.springframework.util.LinkedMultiValueMap; import org.springframework.util.MultiValueMap; import org.springframework.web.client.RestTemplate; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.util.*; @Service public class OrderPrivateCarServiceImpl extends ServiceImpl implements IOrderPrivateCarService { @Resource private OrderPrivateCarMapper orderPrivateCarMapper; @Resource private CarServiceMapper carServiceMapper; @Resource private OrderTaxiMapper orderTaxiMapper; @Resource private SensitiveWordsMapper sensitiveWordsMapper; @Resource private UserActivityDiscount1Mapper userActivityDiscount1Mapper; @Resource private SysIntegralMapper sysIntegralMapper; @Resource private OrderCrossCityMapper orderCrossCityMapper; @Resource private RegionMapper regionMapper; @Autowired private DateUtil dateUtil; @Autowired private IUserInfoService userInfoService; @Autowired private IDriverService driverService; @Autowired private IDriverServiceService driverServiceService; @Autowired private PushUtil pushUtil; @Autowired private ICompanyCityService companyCityService; @Autowired private IPushOrderService pushOrderService; @Autowired private ISystemNoticeService systemNoticeService; @Autowired private ICancleOrderService cancleOrderService; @Autowired private IOrderCancelService orderCancelService; @Autowired private RestTemplate internalRestTemplate; @Autowired private IPaymentRecordService paymentRecordService; // @Autowired // private ICBCPayUtil icbcPayUtil; @Autowired private ITransactionDetailsService transactionDetailsService; @Autowired private ChinaMobileUtil chinaMobileUtil; @Autowired private IIncomeService incomeService; @Autowired private IUserCouponRecordService userCouponRecordService; @Autowired private IUserRedPacketRecordService userRedPacketRecordService; @Autowired private ICompanyService companyService; @Autowired private IUserActivityRedenvelopeService userActivityRedenvelopeService; @Autowired private RedisUtil redisUtil; @Autowired private GDFalconUtil gdFalconUtil; @Autowired private GDMapGeocodingUtil gdMapGeocodingUtil; @Autowired private GDMapElectricFenceUtil gdMapElectricFenceUtil; @Autowired private IOrderPositionService orderPositionService; @Autowired private PushMinistryOfTransportUtil pushMinistryOfTransportUtil; @Autowired private IOrderCrossCityService orderCrossCityService; @Autowired private IOrderTaxiService orderTaxiService; @Autowired private PayMoneyUtil payMoneyUtil; public static List orderIds = new ArrayList<>(); @Value("${callbackPath}") private String callbackPath; @Value("${pushMinistryOfTransport}") private boolean pushMinistryOfTransport; /** * 专车下单操作 * @param serverCarModelId 服务车型id * @param travelTime 出行时间 * @param reservation 是否预约(1=否,2=是) * @param instead 是否代下单(0=否,1=是) * @param startLon 起点经度 * @param startLat 起点纬度 * @param startAddress 起点详细地址 * @param endLon 终点经度 * @param endLat 终点纬度 * @param endAddress 终点详细地址 * @param name 乘客姓名 * @param phone 乘客电话 * @return * @throws Exception */ @Override public synchronized ResultUtil saveOrderPrivateCar(Integer serverCarModelId, Date travelTime, Integer reservation, Integer instead, String placementLon, String placementLat, String startLon, String startLat, String startAddress, String endLon, String endLat, String endAddress, String name, String phone, Integer orderSource, Integer driverId, Integer type, Integer uid) throws Exception { //如果出行时间大于当前10分钟则默认为预约单 if(travelTime.getTime() > (System.currentTimeMillis() + 600000)){ reservation = 2; } /** * 1.下了即时单就不能下预约单和即时单 * 2.下了预约单和再下一张即时单不能再下预约单 */ List orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 1, 1, 1, 2, 3, 4, 5, 6, 7, 11); if(orderPrivateCars.size() > 0){ return ResultUtil.error("有未完成的订单"); } List list = orderTaxiMapper.queryByState_(uid, 1, 1, 1, 2, 3, 4, 5, 6, 11); if(list.size() > 0){ return ResultUtil.error("有未完成的订单"); } orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 2, 1, 1, 2, 3, 4, 5, 6, 7, 11); if(orderPrivateCars.size() > 0 && reservation == 2){ return ResultUtil.error("有未完成的订单"); } list = orderTaxiMapper.queryByState_(uid, 2, 1, 1, 2, 3, 4, 5, 6, 11); if(list.size() > 0 && reservation == 2){ return ResultUtil.error("有未完成的订单"); } startAddress = startAddress.replaceAll("& #40;", "("); startAddress = startAddress.replaceAll("& #41;", ")"); endAddress = endAddress.replaceAll("& #40;", "("); endAddress = endAddress.replaceAll("& #41;", ")"); if((orderSource == 1 || orderSource == 3) && null == serverCarModelId){ return ResultUtil.error("请选择服务车型"); } OrderPrivateCar orderPrivateCar = new OrderPrivateCar(); orderPrivateCar.setType(type); orderPrivateCar.setUserId(uid); orderPrivateCar.setServerCarModelId(serverCarModelId); orderPrivateCar.setOrderNum(this.getOrderNum()); orderPrivateCar.setPlacementLon(Double.valueOf(placementLon)); orderPrivateCar.setPlacementLat(Double.valueOf(placementLat)); Map geocode = gdMapGeocodingUtil.geocode(placementLon, placementLat); orderPrivateCar.setPlacementAddress(geocode.get("address")); orderPrivateCar.setStartLon(Double.valueOf(startLon)); orderPrivateCar.setStartLat(Double.valueOf(startLat)); orderPrivateCar.setStartAddress(startAddress); orderPrivateCar.setEndLon(Double.valueOf(endLon)); orderPrivateCar.setEndLat(Double.valueOf(endLat)); orderPrivateCar.setEndAddress(endAddress); orderPrivateCar.setSubstitute(instead); orderPrivateCar.setPassengers(name); orderPrivateCar.setPassengersPhone(phone); if(instead == 0 || ToolUtil.isEmpty(orderPrivateCar.getPassengers())){ UserInfo userInfo = userInfoService.selectById(uid); if(ToolUtil.isEmpty(userInfo.getPhone())){ return ResultUtil.error("请先绑定手机号码"); } orderPrivateCar.setPassengers(userInfo.getName()); orderPrivateCar.setPassengersPhone(userInfo.getPhone()); } orderPrivateCar.setState(1); orderPrivateCar.setInsertTime(new Date()); orderPrivateCar.setTravelTime(travelTime); orderPrivateCar.setOrderType(reservation); orderPrivateCar.setOrderSource(orderSource); if(orderSource == 2){//扫码下单 Driver driver = driverService.selectById(driverId); if(null == driver){ return ResultUtil.error("司机信息有误,无法完成下单"); } if(driver.getAuthState() == 1){ return ResultUtil.error("司机信息还未完成审核,无法完成下单"); } if(driver.getAuthState() == 3){ return ResultUtil.error("司机账户已被冻结,无法提供服务"); } if(driver.getAuthState() == 4){ return ResultUtil.error("司机信息未通过审核,无法提供服务"); } if(driver.getState() == 1){ return ResultUtil.error("司机还未上线,无法提供服务"); } if(driver.getState() == 3){ return ResultUtil.error("司机正在服务中,无法提供服务"); } List query = driverServiceService.query(driverId, 1); if(query.size() == 0){ return ResultUtil.error("该司机不能服务此业务"); } orderPrivateCar.setDriverId(driverId); orderPrivateCar.setCompanyId(driver.getFranchiseeId() != null && driver.getFranchiseeId() != 0 ? driver.getFranchiseeId() : ( driver.getCompanyId() != null && driver.getCompanyId() != 0 ? driver.getCompanyId() : 1)); orderPrivateCar.setState(2); orderPrivateCar.setCarId(driver.getCarId()); CarService query1 = carServiceMapper.query(1, driver.getCarId()); orderPrivateCar.setServerCarModelId(query1.getServerCarModelId()); orderPrivateCar.setSnatchOrderTime(new Date()); //调用高德创建轨迹 // String s = gdFalconUtil.selectTerminal(driver.getPhone()); // String track = gdFalconUtil.createTrack(s); // orderPrivateCar.setTrackId(track); //调用移动的小号接口 Map geocode1 = gdMapGeocodingUtil.geocode(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); Region region = regionMapper.query(geocode1.get("districtCode")); // Map map = chinaMobileUtil.midAxbBindSend(orderPrivateCar.getPassengersPhone(), driver.getPhone(), Integer.valueOf(region.getCitycode().substring(1))); // if(String.valueOf(map.get("code")).equals("200")){ // orderPrivateCar.setTelX(map.get("telX")); // orderPrivateCar.setBindId(map.get("bindId")); // } driver.setState(3); driverService.updateById(driver); } orderPrivateCar.setIsReassign(1); orderPrivateCar.setIsDelete(1); this.insert(orderPrivateCar); if(orderSource == 2){//扫码下单 new Thread(new Runnable() { @Override public void run() { pushUtil.pushOrderState(1, uid, orderPrivateCar.getId(), 1, 2, 0); pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, 2, 0); pushUtil.pushDriverPosition(orderPrivateCar.getId(), 1); } }).start(); } //推单操作 if(orderPrivateCar.getState() == 1){ this.pushOrder(orderPrivateCar); } //添加消息 systemNoticeService.addSystemNotice(1, "您的专车订单已下单成功,我们正在为您指派司机,请稍后!", orderPrivateCar.getUserId(), 1); BaseWarpper baseWarpper = new BaseWarpper(); baseWarpper.setId(orderPrivateCar.getId()); return ResultUtil.success(baseWarpper); } /** * 下单后继续等待 * @param id * @return * @throws Exception */ @Override public ResultUtil pushOrderPrivateCar(Integer id) throws Exception { OrderPrivateCar orderPrivateCar = this.selectById(id); if(null == orderPrivateCar){ return ResultUtil.error("推送订单失败,订单信息有误"); } if(orderPrivateCar.getState() != 1){ return ResultUtil.error("订单已被司机接单,不能重复推送"); } //处理摆渡订单的继续推单操作 if(orderPrivateCar.getType() == 2){ OrderCrossCityServiceImpl.pushEndMap.put(orderPrivateCar.getCrossCityOrderId(), false);//还原标识数据 List list = this.selectList(new EntityWrapper().eq("type", 2).eq("crossCityOrderId", orderPrivateCar.getCrossCityOrderId()).eq("place", orderPrivateCar.getPlace())); List> orders = new ArrayList<>(); for(OrderPrivateCar orderPrivateCar1 : list){ if(orderPrivateCar1.getState() != 1){ return ResultUtil.error("订单已被司机接单,推单取消"); } Map map = new HashMap<>(); map.put("orderType", 1); map.put("orderId", orderPrivateCar1.getId()); orders.add(map); } List list1 = orderTaxiService.selectList(new EntityWrapper().eq("type", 2).eq("crossCityOrderId", orderPrivateCar.getCrossCityOrderId()).eq("place", orderPrivateCar.getPlace())); for(OrderTaxi orderTaxi : list1){ if(orderTaxi.getState() != 1){ return ResultUtil.error("订单已被司机接单,推单取消"); } Map map = new HashMap<>(); map.put("orderType", 2); map.put("orderId", orderTaxi.getId()); orders.add(map); } //开始重新推单 orderCrossCityService.pushOrder(orders); }else{ this.pushOrder(orderPrivateCar); } return ResultUtil.success(); } @Override public ResultUtil queryCancleAmount(Integer id) throws Exception { OrderPrivateCar orderPrivateCar = this.selectById(id); if(null == orderPrivateCar){ return ResultUtil.error("获取数据失败,订单信息有误"); } double amount = 0; CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId()); if(null != orderPrivateCar.getDriverId() && (orderPrivateCar.getSnatchOrderTime().getTime() + query.getMinuteNum() * 60 * 1000) < new Date().getTime()){//收费的情况 if(null != query){ amount += query.getMoney(); } } BaseWarpper baseWarpper = new BaseWarpper(); baseWarpper.setAmount(amount); return ResultUtil.success(baseWarpper); } @Override public ResultUtil addCancle(Integer id, String reason, String remark, Integer uid) throws Exception { if(ToolUtil.isNotEmpty(remark)){ if(ToolUtil.isNotEmpty(remark)){ List sensitiveWords = sensitiveWordsMapper.selectList(null); for(SensitiveWords s : sensitiveWords){ remark = remark.replaceAll(s.getContent(), "***"); } } } OrderPrivateCar orderPrivateCar = this.selectById(id); Integer integer = null; if(null == orderPrivateCar){ return ResultUtil.error("取消订单失败,订单信息有误"); } if(orderPrivateCar.getState() > 5 && orderPrivateCar.getState() != 11){ return ResultUtil.error("取消订单失败,不合法的操作"); } if(null == orderPrivateCar.getDriverId()){//没有接单的情况 if(orderPrivateCar.getType() == 2){//摆渡车 OrderCrossCityServiceImpl.pushEndMap.remove(orderPrivateCar.getCrossCityOrderId());//删除标识数据 List list = this.selectList(new EntityWrapper().eq("type", 2).eq("crossCityOrderId", orderPrivateCar.getCrossCityOrderId()).eq("place", orderPrivateCar.getPlace())); for(OrderPrivateCar orderPrivateCar1 : list){ orderCancelService.saveData(orderPrivateCar1.getId(), 1, "无司机接单", "无司机接单", null, null, 2, 1, uid); orderPrivateCar1.setState(10); this.updateById(orderPrivateCar1); } List list1 = orderTaxiService.selectList(new EntityWrapper().eq("type", 2).eq("crossCityOrderId", orderPrivateCar.getCrossCityOrderId()).eq("place", orderPrivateCar.getPlace())); for(OrderTaxi orderTaxi : list1){ orderCancelService.saveData(orderTaxi.getId(), 2, "无司机接单", "无司机接单", null, null, 2, 1, uid); orderTaxi.setState(10); orderTaxiService.updateById(orderTaxi); } }else{ integer = orderCancelService.saveData(id, 1, "无司机接单", "无司机接单", null, null, 2, 1, uid); orderPrivateCar.setState(10); this.updateById(orderPrivateCar); } }else { CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId()); if (null != query) { if ((orderPrivateCar.getSnatchOrderTime().getTime() + query.getMinuteNum() * 60 * 1000) < System.currentTimeMillis() && query.getMoney().compareTo(0D) > 0) {//收费的情况 orderPrivateCar.setState(12); this.updateById(orderPrivateCar); integer = orderCancelService.saveData(id, 1, reason, remark, null, query.getMoney(), 1, 1, uid); } else { integer = orderCancelService.saveData(id, 1, reason, remark, null, null, 2, 1, uid); orderPrivateCar.setState(10); this.updateById(orderPrivateCar); } this.deleteTask(id);//删除定时任务 new Thread(new Runnable() { @Override public void run() { pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); System.err.println("推送取消操作---------------------"); } }).start(); //修改司机为空闲 Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); driver.setState(2); driverService.updateById(driver); }else{ return ResultUtil.error("请完善后台取消规则设置"); } } new Thread(new Runnable() { @Override public void run() { if(pushMinistryOfTransport){ //上传数据 pushMinistryOfTransportUtil.orderCancel(orderPrivateCar.getId()); } } }).start(); //添加消息 systemNoticeService.addSystemNotice(1, "您已成功取消出行订单,谢谢使用!", orderPrivateCar.getUserId(), 1); Map map = new HashMap<>(); map.put("id", integer); return ResultUtil.success(map); } /** * 取消订单操作 * @param id * @return * @throws Exception */ @Override public ResultUtil cancleOrderPrivateCar(Integer id, Integer payType, Integer cancleId, Integer type) throws Exception { OrderPrivateCar orderPrivateCar = this.selectById(id); Integer uid = orderPrivateCar.getUserId(); UserInfo userInfo = userInfoService.selectById(uid); ResultUtil resultUtil = ResultUtil.success(""); if(null == orderPrivateCar){ return ResultUtil.error("取消订单失败,订单信息有误", ""); } if(orderPrivateCar.getState() != 12){ return ResultUtil.error("取消订单失败,不合法的操作", ""); } OrderCancel orderCancel = null; if(null == cancleId){ orderCancel = orderCancelService.query(id, 1, null, null, 1); }else{ orderCancel = orderCancelService.selectById(cancleId); } CancleOrder query = cancleOrderService.query(orderPrivateCar.getOrderType(), 1, orderPrivateCar.getCompanyId()); if(null != query){ if(payType == 1){//微信支付 String value = redisUtil.getValue("appletOpenId"); String appletsOpenId = null; if(ToolUtil.isNotEmpty(value)){ JSONObject jsonObject = JSON.parseObject(value); appletsOpenId = jsonObject.getString(uid.toString()); }else{ appletsOpenId = userInfo.getAppletsOpenId(); } orderCancel.setPayType(1); orderCancelService.updateById(orderCancel); String app = type == 1 ? "APP" : "JSAPI"; resultUtil = payMoneyUtil.weixinpay("订单取消", "", id + "_1_" + UUIDUtil.getRandomCode(5), query.getMoney().toString(), "/base/wxCancelOrderTaxi", app, userInfo.getAppletsOpenId()); paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, id, 1, 1, query.getMoney(), "", 1);//添加预支付数据 // String value = redisUtil.getValue("appletOpenId"); // String appletsOpenId = null; // if(ToolUtil.isNotEmpty(value)){ // JSONObject jsonObject = JSON.parseObject(value); // appletsOpenId = jsonObject.getString(uid.toString()); // }else{ // appletsOpenId = userInfo.getAppletsOpenId(); // } // orderCancel.setPayType(1); // orderCancelService.updateById(orderCancel); // Map map = icbcPayUtil.placeAnOrder(id + ",1", 9, 5, uid.toString(), "订单取消", query.getMoney(), callbackPath + "/base/wxCancelOrderTaxi", "", type, appletsOpenId); // if(map.get("code").equals("200")){ // paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, id, 1, 1, query.getMoney(), map.get("order_id"), 1);//添加预支付数据 // resultUtil = ResultUtil.success(map.get("data")); // }else{ // resultUtil = ResultUtil.error(map.get("msg"), ""); // } } if(payType == 2){//支付宝支付 orderCancel.setPayType(2); orderCancelService.updateById(orderCancel); resultUtil = payMoneyUtil.alipay("订单取消", "订单取消", "", id + "_1_" + UUIDUtil.getRandomCode(5), query.getMoney().toString(), "/base/aliCancelOrderTaxi"); paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, id, 1, 2, query.getMoney(), "", 1);//添加预支付数据 // orderCancel.setPayType(2); // orderCancelService.updateById(orderCancel); // Map map = icbcPayUtil.placeAnOrder(id + ",1", 10, 5, uid.toString(), "订单取消", query.getMoney(), callbackPath + "/base/aliCancelOrderTaxi", "", type, null); // if(map.get("code").equals("200")){ // paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, id, 1, 2, query.getMoney(), map.get("order_id"), 1);//添加预支付数据 // resultUtil = ResultUtil.success(map.get("data")); // }else{ // resultUtil = ResultUtil.error(map.get("msg"), ""); // } } if(payType == 3){//余额支付 if(userInfo.getBalance() != null && userInfo.getBalance() < query.getMoney()){ return ResultUtil.error("余额不足,无法完成支付", ""); } userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(query.getMoney())).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); //添加交易明细 transactionDetailsService.saveData(uid, "取消订单", query.getMoney(), 2, 1, 1, 1, id); userInfoService.updateById(userInfo); //解除小号绑定 if(orderPrivateCar.getBindId() != null){ chinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId()); } orderPrivateCar.setState(10); orderPrivateCar.setTelX(""); orderPrivateCar.setBindId(""); this.updateById(orderPrivateCar); orderCancel.setState(2); orderCancel.setPayType(3); orderCancelService.updateById(orderCancel); //添加已收入明细 incomeService.saveData(1, orderPrivateCar.getCompanyId(), 3, orderPrivateCar.getId(), 1, query.getMoney()); this.deleteTask(id);//删除定时任务 // new Thread(new Runnable() { // @Override // public void run() { // pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); // } // }).start(); //添加消息 systemNoticeService.addSystemNotice(1, "您已使用余额成功支付取消订单费用,谢谢使用!", orderPrivateCar.getUserId(), 1); } } return resultUtil; } /** * 推送抢单数据 * @param orderPrivateCar * @throws Exception */ public void pushOrder(OrderPrivateCar orderPrivateCar) throws Exception{ new Thread(new Runnable() { @Override public void run() { try { orderIds.add(orderPrivateCar.getId());//添加记录,防止调用接口重复提醒无人接单 String vehicle = redisUtil.getValue("VEHICLE"); List integers = new ArrayList<>(); if(ToolUtil.isNotEmpty(vehicle)){ integers = JSON.parseArray(vehicle).toJavaList(Integer.class); } Company query = companyCityService.query(String.valueOf(orderPrivateCar.getStartLon()), String.valueOf(orderPrivateCar.getStartLat()));//获取起点所属分公司 List querys = pushOrderService.querys(null, 1, query.getId());//获取需要推送的次数 for(int i = 1; i <= querys.size(); i++){ PushOrder pushOrder = pushOrderService.querys(i, 1, query.getId()).get(0); //获取空闲司机 List list = driverService.queryIdleDriver(1, orderPrivateCar.getServerCarModelId(), orderPrivateCar.getStartLon(), orderPrivateCar.getStartLat(), pushOrder.getPushDistance(), null);//所有附近空闲司机 if(list.size() > 0){ double driverProportion = pushOrder.getDriverProportion() / 100;//推送占比计算成小数 int lastIndex = Double.valueOf(list.size() * driverProportion).intValue();//计算占比转成整数(下标截取) list = list.subList(0, lastIndex);//获取空闲司机中占比数据 for(Driver driver : list){//开始进行推送 boolean bo = false; for(Integer integer : integers){ if(integer.compareTo(driver.getId()) == 0){ bo = true; break; } } if(bo){ continue; } pushUtil.pushOrderState(2, driver.getId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), pushOrder.getPushTime()); } } Thread.sleep(pushOrder.getPushTime() * 1000);//设置等待时间 Integer state = orderPrivateCarMapper.selectById(orderPrivateCar.getId()).getState(); if(state > 1){ break; } if(i == querys.size() && state == 1){ pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1); orderIds.remove(orderPrivateCar.getId()); } } } catch (Exception e) { e.printStackTrace(); } } }).start(); } @Override public synchronized String getOrderNum() throws Exception{ int size = this.selectCount(null); return "PRIVATE" + String.valueOf(1000000 + size + 1).substring(1); } /** * 删除定时任务 * @param orderId */ @Override public void deleteTask(Integer orderId){ //发送验证码短信 HttpHeaders headers = new HttpHeaders(); // 以表单的方式提交 headers.setContentType(MediaType.APPLICATION_FORM_URLENCODED); //将请求头部和参数合成一个请求 MultiValueMap params = new LinkedMultiValueMap<>(); params.add("orderId", orderId + ""); params.add("orderType", "1"); HttpEntity> requestEntity = new HttpEntity<>(params, headers); String s = internalRestTemplate.postForObject("http://driver-server/base/netty/deleteTask", requestEntity, String.class); JSONObject jsonObject = JSON.parseObject(s, JSONObject.class); if(jsonObject.getIntValue("code") != 200){ System.err.println("调用driver-server出错了"); } } @Override public Map queryBalance(Integer orderId, Integer uid) throws Exception { Map map = new HashMap<>(); UserInfo userInfo = userInfoService.selectById(uid); map.put("balance", userInfo.getBalance()); OrderPrivateCar orderPrivateCar = this.selectById(orderId); int i = userCouponRecordService.queryAvailable(uid, orderPrivateCar.getCompanyId(), 1, 1, orderPrivateCar.getOrderMoney()); i = i + userCouponRecordService.queryAvailable(uid, orderPrivateCar.getCompanyId(), 1, 0, orderPrivateCar.getOrderMoney()); map.put("coupon", i); return map; } @Override public List> queryCoupon(Integer orderId, Integer uid, Integer pageNum, Integer size) throws Exception { OrderPrivateCar orderPrivateCar = this.selectById(orderId); List> list = userCouponRecordService.queryCoupon(uid, orderPrivateCar.getCompanyId(), 1, 1, orderPrivateCar.getOrderMoney(), pageNum, size); List> list1 = userCouponRecordService.queryCoupon(uid, orderPrivateCar.getCompanyId(), 1, 0, orderPrivateCar.getOrderMoney(), pageNum, size); list.addAll(list1); return list; } @Override public ResultUtil payPrivateCarOrder(Integer payType, Integer orderId, Integer couponId, Integer type) throws Exception { OrderPrivateCar orderPrivateCar = this.selectById(orderId); if(orderPrivateCar.getState() == 8 || orderPrivateCar.getState() == 9){ return ResultUtil.error("订单已完成支付,不允许重复支付", ""); } if(orderPrivateCar.getState() != 7){ return ResultUtil.error("订单不在待支付状态,不允许支付", ""); } Integer uid = orderPrivateCar.getUserId(); Double orderMoney = orderPrivateCar.getOrderMoney(); UserInfo userInfo = userInfoService.selectById(uid); ResultUtil resultUtil = ResultUtil.success(""); orderPrivateCar.setCouponMoney(0D);//初始化历史数据 orderPrivateCar.setCouponId(null); //计算优惠券 UserCouponRecord userCouponRecord = null; if(null != couponId){ userCouponRecord = userCouponRecordService.selectById(couponId); if(userCouponRecord.getCompanyId() != orderPrivateCar.getCompanyId()){ return ResultUtil.error("优惠券不能用于此订单", ""); } if(userCouponRecord.getState() == 2){ return ResultUtil.error("优惠券已使用", ""); } if(userCouponRecord.getState() == 3){ return ResultUtil.error("优惠券已过期", ""); } if(userCouponRecord.getCouponUseType() != 0 && userCouponRecord.getCouponUseType() != 1){ return ResultUtil.error("优惠券不能用于此类型订单", ""); } if(userCouponRecord.getCouponType() == 2 && orderMoney.compareTo(userCouponRecord.getFullMoney()) < 0){ return ResultUtil.error("优惠券不能用于此订单", ""); } orderMoney = orderMoney - userCouponRecord.getMoney(); orderPrivateCar.setCouponMoney(userCouponRecord.getMoney()); orderPrivateCar.setCouponId(couponId); } //计算红包 UserRedPacketRecord query = userRedPacketRecordService.query(uid, orderPrivateCar.getCompanyId(), 1, 1, orderMoney); if(null != query && query.getMoney().compareTo(orderMoney) < 0){ orderMoney = orderMoney - query.getMoney(); orderPrivateCar.setRedPacketMoney(query.getMoney()); orderPrivateCar.setRedPacketId(query.getId()); } //计算折扣 UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderPrivateCar.getCompanyId()); if(null != query2){ Double special = query2.getSpecial(); orderPrivateCar.setDiscount(special); double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); if(orderMoney.compareTo(v) > 0){ orderPrivateCar.setDiscountMoney(orderMoney - v); orderPrivateCar.setActivityId(query2.getId()); orderMoney = v; } } if(payType == 1){//微信支付 String app = type == 1 ? "APP" : "JSAPI"; resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, "", 1);//添加预支付数据 } if(payType == 2) {//支付宝支付 resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi"); paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, "", 1);//添加预支付数据 } // if(payType == 1){//微信支付 // String value = redisUtil.getValue("appletOpenId"); // String appletsOpenId = null; // if(ToolUtil.isNotEmpty(value)){ // JSONObject jsonObject = JSON.parseObject(value); // appletsOpenId = jsonObject.getString(uid.toString()); // }else{ // appletsOpenId = userInfo.getAppletsOpenId(); // } // Map map = icbcPayUtil.placeAnOrder(orderId + ",1", 9, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/wxPayOrderTaxi", "", type, appletsOpenId); // if(map.get("code").equals("200")){ // paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, map.get("order_id"), 1);//添加预支付数据 // resultUtil = ResultUtil.success(map.get("data")); // }else{ // resultUtil = ResultUtil.error(map.get("msg"), ""); // } // } // if(payType == 2) {//支付宝支付 // Map map = icbcPayUtil.placeAnOrder(orderId + ",1", 10, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/aliPayOrderTaxi", "", type, null); // if (map.get("code").equals("200")) { // paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, map.get("order_id"), 1);//添加预支付数据 // resultUtil = ResultUtil.success(map.get("data")); // } else { // resultUtil = ResultUtil.error(map.get("msg"), ""); // } // } if(payType == 3){//余额支付 if(userInfo.getBalance() == null || userInfo.getBalance() < orderMoney){ return ResultUtil.error("余额不足,无法完成支付", ""); } userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); SysIntegral query1 = sysIntegralMapper.query(orderPrivateCar.getCompanyId()); userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 //添加交易明细 transactionDetailsService.saveData(uid, "完成订单", orderMoney, 2, 1, 1, 1, orderId); userInfoService.updateById(userInfo); orderPrivateCar.setState(8); orderPrivateCar.setPayType(3); orderPrivateCar.setPayMoney(orderMoney); //处理优惠券和红包 if(null != userCouponRecord){ userCouponRecord.setState(2); userCouponRecord.setEndTime(new Date()); userCouponRecordService.updateById(userCouponRecord); } if(null != query){ query.setState(2); query.setEndTime(new Date()); userRedPacketRecordService.updateById(query); } //添加已收入明细 Company company = companyService.selectById(orderPrivateCar.getCompanyId()); Double speMoney = company.getSpeMoney(); BigDecimal d = null;//企业收入 BigDecimal c = null;//司机收入 if(company.getIsSpeFixedOrProportional() == 2){//固定 d = new BigDecimal(speMoney); c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d);//只有出行金额参与抽成,其余归属司机 } if(company.getIsSpeFixedOrProportional() == 1){//比例 Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney(); d = new BigDecimal(price).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_EVEN); c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); } incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue()); incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue()); Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); driverService.updateById(driver); // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 new Thread(new Runnable() { @Override public void run() { pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); } }).start(); systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); new Thread(new Runnable() { @Override public void run() { if(pushMinistryOfTransport){//上传数据 pushMinistryOfTransportUtil.operatePay(orderId); } } }).start(); } this.updateAllColumnById(orderPrivateCar); return resultUtil; } @Override public synchronized ResultUtil queryRedMoney(Integer orderId) throws Exception { OrderPrivateCar orderPrivateCar = this.selectById(orderId); Integer companyId = orderPrivateCar.getCompanyId(); Map query = userActivityRedenvelopeService.query(companyId, orderPrivateCar.getTravelTime()); Double money = 0D; BaseWarpper baseWarpper = new BaseWarpper(); if(null != query){ Integer type = Integer.valueOf(String.valueOf(query.get("type"))); if(type == 1){//固定金额 money = Double.valueOf(String.valueOf(query.get("money"))); }else{//随机金额 Double startMoney = Double.valueOf(String.valueOf(query.get("startMoney"))); Double endMoney = Double.valueOf(String.valueOf(query.get("endMoney"))); int i = new BigDecimal(endMoney).subtract(new BigDecimal(startMoney)).intValue(); Random random = new Random(); int num = random.nextInt(i); money = new BigDecimal(startMoney).add(new BigDecimal(num)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); } //判断当前红包是否大于剩余可领取总金额 if(money.compareTo(Double.valueOf(query.get("lavePrice").toString())) > 0){ baseWarpper.setAmount(0D); return ResultUtil.success(baseWarpper); } } baseWarpper.setAmount(money); if(money > 0){ //添加临时红包数据 UserRedPacketRecord userRedPacketRecord = new UserRedPacketRecord(); userRedPacketRecord.setMoney(money); Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.set(Calendar.DAY_OF_MONTH, calendar.get(Calendar.DAY_OF_MONTH) + Integer.valueOf(String.valueOf(query.get("effective")))); userRedPacketRecord.setExpirationTime(calendar.getTime()); userRedPacketRecord.setInsertTime(new Date()); userRedPacketRecord.setCompanyId(Integer.valueOf(String.valueOf(query.get("companyId")))); userRedPacketRecord.setState(0); userRedPacketRecord.setOrderId(orderPrivateCar.getId()); userRedPacketRecord.setOrderType(1); userRedPacketRecord.setUserId(orderPrivateCar.getUserId()); userRedPacketRecordService.insert(userRedPacketRecord); } return ResultUtil.success(baseWarpper); } @Override public synchronized ResultUtil shareRedEnvelope(Integer orderId) throws Exception { OrderPrivateCar orderPrivateCar = this.selectById(orderId); UserRedPacketRecord query = userRedPacketRecordService.query_(orderPrivateCar.getUserId(), orderPrivateCar.getCompanyId(), 0, 1, null); if(null != query){ Double money = query.getMoney(); Map map = userActivityRedenvelopeService.query(orderPrivateCar.getCompanyId(), orderPrivateCar.getTravelTime()); Double laveMoney = Double.valueOf(String.valueOf(map.get("laveMoney"))); if(money.compareTo(laveMoney) > 0){ return ResultUtil.error("手速太慢了,红包已派发完啦!"); } //判断当前红包是否大于剩余可领取总金额 if(money.compareTo(Double.valueOf(map.get("lavePrice").toString())) > 0){ return ResultUtil.error("手速太慢了,红包已派发完啦!"); } double v = new BigDecimal(laveMoney).subtract(new BigDecimal(money)).doubleValue(); UserActivityRedenvelope id = userActivityRedenvelopeService.selectById(String.valueOf(map.get("id"))); id.setLaveMoney(v); id.setLavePrice(new BigDecimal(id.getLavePrice() - money).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); userActivityRedenvelopeService.updateById(id); query.setState(1); query.setRedPacketActivityId(id.getId()); userRedPacketRecordService.updateById(query); } return ResultUtil.success(); } /** * 取消订单支付后的处理 * @param id 订单=id * @param order_id 工行支付单号 * @param type 1=微信,2=支付宝 * @throws Exception */ @Override public void payCancelOrderPrivateCar(Integer id, String order_id, Integer type) throws Exception { OrderPrivateCar orderPrivateCar = this.selectById(id); PaymentRecord query = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, Integer.valueOf(id), 1, type, 1); if(null != query){ //添加交易明细 transactionDetailsService.saveData(orderPrivateCar.getUserId(), "取消订单", query.getAmount(), 2, 1, 1, 1, query.getOrderId()); orderPrivateCar.setState(10); //解除小号绑定 if(orderPrivateCar.getBindId() != null){ chinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId()); } orderPrivateCar.setBindId(""); orderPrivateCar.setTelX(""); this.updateById(orderPrivateCar); query.setState(2); query.setCode(order_id); paymentRecordService.updateById(query); OrderCancel query1 = orderCancelService.query(query.getOrderId(), query.getOrderType(), query.getAmount(), query.getPayType(), 1); if (null != query1){ query1.setState(2); orderCancelService.updateById(query1); } //添加已收入明细 incomeService.saveData(1, orderPrivateCar.getCompanyId(), 3, orderPrivateCar.getId(), 1, query.getAmount()); this.deleteTask(orderPrivateCar.getId());//删除定时任务 // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 // new Thread(new Runnable() { // @Override // public void run() { // pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); // } // }).start(); //添加消息 systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信" : "支付宝") + "成功支付取消订单费用,谢谢使用!", orderPrivateCar.getUserId(), 1); }else{ System.err.println("预支付数据异常(orderId = " + id + ")"); } } @Override public void payOrderPrivateCarCallback(Integer id, String order_id, Integer type) throws Exception { OrderPrivateCar orderPrivateCar = this.selectById(id); PaymentRecord query = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, Integer.valueOf(id), 1, type, 1); if(null != query){ //添加交易明细 transactionDetailsService.saveData(orderPrivateCar.getUserId(), "完成订单", query.getAmount(), 2, 1, 1, 1, query.getOrderId()); orderPrivateCar.setState(8); orderPrivateCar.setPayType(type); orderPrivateCar.setPayMoney(query.getAmount()); this.updateById(orderPrivateCar); UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId()); SysIntegral query1 = sysIntegralMapper.query(orderPrivateCar.getCompanyId()); userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分 userInfoService.updateById(userInfo); //处理优惠券和红包 if(null != orderPrivateCar.getCouponId()){ UserCouponRecord userCouponRecord = userCouponRecordService.selectById(orderPrivateCar.getCouponId()); userCouponRecord.setState(2); userCouponRecord.setEndTime(new Date()); userCouponRecordService.updateById(userCouponRecord); } if(null != orderPrivateCar.getRedPacketId()){ UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(orderPrivateCar.getRedPacketId()); userRedPacketRecord.setState(2); userRedPacketRecord.setEndTime(new Date()); userRedPacketRecordService.updateById(userRedPacketRecord); } query.setState(2); query.setCode(order_id); paymentRecordService.updateById(query); //添加已收入明细 Company company = companyService.selectById(orderPrivateCar.getCompanyId()); Double taxi = company.getSpeMoney(); BigDecimal d = null;//企业收入 BigDecimal c = null;//司机收入 if(company.getIsSpeFixedOrProportional() == 2){//固定 d = new BigDecimal(taxi); c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); } if(company.getIsSpeFixedOrProportional() == 1){//比例 Double price = orderPrivateCar.getStartMoney() + orderPrivateCar.getMileageMoney() + orderPrivateCar.getWaitMoney() + orderPrivateCar.getDurationMoney() + orderPrivateCar.getLongDistanceMoney(); d = new BigDecimal(price).multiply(new BigDecimal(taxi).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_EVEN); c = new BigDecimal(orderPrivateCar.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN); } incomeService.saveData(1, orderPrivateCar.getCompanyId(), 2, orderPrivateCar.getId(), 1, d.doubleValue()); incomeService.saveData(2, orderPrivateCar.getDriverId(), 2, orderPrivateCar.getId(), 1, c.doubleValue()); Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); driver.setBusinessMoney(new BigDecimal(null != driver.getBusinessMoney() ? driver.getBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); driver.setLaveBusinessMoney(new BigDecimal(null != driver.getLaveBusinessMoney() ? driver.getLaveBusinessMoney() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); driver.setBalance(new BigDecimal(null != driver.getBalance() ? driver.getBalance() : 0).add(c).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); driverService.updateById(driver); // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 new Thread(new Runnable() { @Override public void run() { pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); } }).start(); systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信" : "支付宝") + "成功完成出行订单支付,谢谢使用!", orderPrivateCar.getUserId(), 1); new Thread(new Runnable() { @Override public void run() { if(pushMinistryOfTransport){//上传数据 pushMinistryOfTransportUtil.operatePay(orderPrivateCar.getId()); } } }).start(); }else{ System.err.println("预支付数据异常(orderId = " + id + ")"); } } @Override public List queryOrder(Integer uid, Integer... state) throws Exception { return orderPrivateCarMapper.queryByState_(uid, state); } @Override public List> queryMyOrderList(Integer uid, Integer pageNum, Integer size) throws Exception { pageNum = (pageNum - 1) * size; List> maps = orderPrivateCarMapper.queryMyOrderList(uid, pageNum, size); for(Map map : maps){ if(Integer.valueOf(String.valueOf(map.get("state"))) == 11){ map.put("state", map.get("oldState")); } } return maps; } @Override public List> queryInvoiceOrder(Integer type, Date startTime, Date endTime, Double startMoney, Double endMoney, Integer uid) throws Exception { startTime = dateUtil.getStartOrEndDate(startTime, "start"); endTime = dateUtil.getStartOrEndDate(endTime, "end"); return orderPrivateCarMapper.queryInvoiceOrder(type, startTime, endTime, startMoney, endMoney, uid); } @Override public Map queryOrderInfo(Integer orderId) throws Exception { Map map = orderPrivateCarMapper.queryOrderInfo(orderId); if(null != map.get("reassignNotice") && Integer.valueOf(String.valueOf(map.get("reassignNotice"))) == 2){//改派完成,重新获取了新的司机数据,开始修改数据防止继续调用 OrderPrivateCar orderPrivateCar = this.selectById(orderId); orderPrivateCar.setReassignNotice(0); this.updateById(orderPrivateCar); } if(Integer.valueOf(String.valueOf(map.get("state"))) == 11){ map.put("state", map.get("oldState")); } if(Integer.valueOf(String.valueOf(map.get("state"))) != 8 && Integer.valueOf(String.valueOf(map.get("state"))) != 9){ map.put("redPacketMoney", null); map.put("couponMoney", null); } String driverId = redisUtil.getValue("DEVICE_" + map.get("driverId")); map.put("device", ToolUtil.isNotEmpty(driverId) ? 2 : 1); map.put("orderType", 1); return map; } @Override public List> queryMyTravelRecord(Integer uid) throws Exception { return orderPrivateCarMapper.queryMyTravelRecord(uid); } /** * 获取服务中的订单数据 * @param uid * @return * @throws Exception */ @Override public OrderServerWarpper queryOrderServer(Integer orderId, Integer uid) throws Exception { OrderPrivateCar orderPrivateCar = this.selectById(orderId); //计算预计距离和剩余时间 String value = redisUtil.getValue("DRIVER" + String.valueOf(orderPrivateCar.getDriverId())); if(null == value || "".equals(value)){ System.err.println("司机没有上传位置信息"); //调用获取轨迹中的数据 List> list = orderPositionService.queryTrack(orderId, 2); if(list.size() > 0){ Map map = list.get(list.size() - 1); value = map.get("lon") + "," + map.get("lat"); } } Map distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getStartLon() + "," + orderPrivateCar.getStartLat(), 1); String d = "0"; String t = "0"; if(null == distance){ System.err.println("查询距离出错了"); }else{ d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000)).setScale(2, BigDecimal.ROUND_HALF_EVEN).toString(); t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), 2, RoundingMode.HALF_UP).setScale(2, BigDecimal.ROUND_HALF_EVEN).intValue() + ""; } OrderServerWarpper orderServerWarpper = new OrderServerWarpper(); orderServerWarpper.setOrderId(orderPrivateCar.getId()); orderServerWarpper.setOrderType(1); orderServerWarpper.setState(orderPrivateCar.getState()); orderServerWarpper.setLon(null != value ? value.split(",")[0] : "0.0"); orderServerWarpper.setLat(null != value ? value.split(",")[1] : "0.0"); orderServerWarpper.setReassignNotice(orderPrivateCar.getReassignNotice()); if(orderPrivateCar.getState() == 2 || orderPrivateCar.getState() == 3){//前往预约地 orderServerWarpper.setReservationMileage(d); orderServerWarpper.setReservationTime(t); orderServerWarpper.setServedMileage("0"); orderServerWarpper.setServedTime("0"); orderServerWarpper.setLaveMileage("0"); orderServerWarpper.setLaveTime("0"); } if(orderPrivateCar.getState() == 5 || orderPrivateCar.getState() == 6){//服务中 distance = gdMapElectricFenceUtil.getDistance(value, orderPrivateCar.getEndLon() + "," + orderPrivateCar.getEndLat(), 1); if(null == distance){ System.err.println("查询距离出错了"); }else{ d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000)).setScale(2, BigDecimal.ROUND_HALF_EVEN).toString(); t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60), 2, RoundingMode.HALF_UP).setScale(2, BigDecimal.ROUND_HALF_EVEN).intValue() + ""; } orderServerWarpper.setReservationMileage("0"); orderServerWarpper.setReservationTime("0"); orderServerWarpper.setServedMileage(String.valueOf((null == orderPrivateCar.getMileage() ? 0 : orderPrivateCar.getMileage()) / 1000)); orderServerWarpper.setServedTime(Long.valueOf((new Date().getTime() - orderPrivateCar.getStartServiceTime().getTime()) / 60000).intValue() + ""); orderServerWarpper.setLaveMileage(d); orderServerWarpper.setLaveTime(t); } return orderServerWarpper; } /** * 获取红包使用记录 * @param uid * @return * @throws Exception */ @Override public List> queryRedEnvelope(Integer uid) throws Exception { return orderPrivateCarMapper.queryRedEnvelope(uid); } /** * 获取下单推送完后没有司机接单的提醒 * @return * @throws Exception */ @Override public EndPushWarpper queryEndPush(Integer uid) throws Exception { List list = orderPrivateCarMapper.queryByState(uid, null, null, 1); EndPushWarpper endPushWarpper = new EndPushWarpper(); if(list.size() > 0){ OrderPrivateCar orderPrivateCar = list.get(0); if(!orderIds.contains(orderPrivateCar.getId())){ endPushWarpper.setOrderId(orderPrivateCar.getId()); endPushWarpper.setOrderType(1); endPushWarpper.setState(1); List querys = pushOrderService.querys(null, 2, orderPrivateCar.getCompanyId());//获取需要推送的次数 int time = 0; for(int i = 1; i <= querys.size(); i++){ PushOrder pushOrder = pushOrderService.querys(i, 2, orderPrivateCar.getCompanyId()).get(0); time += pushOrder.getPushTime() * 1000; } //当前时间减去推单总时间大于下单时间 if((System.currentTimeMillis() - time) > orderPrivateCar.getInsertTime().getTime()){ endPushWarpper.setState(2); } } } return endPushWarpper; } }