| | |
| | | import com.baomidou.mybatisplus.annotations.TableField; |
| | | import com.baomidou.mybatisplus.mapper.EntityWrapper; |
| | | import com.baomidou.mybatisplus.service.impl.ServiceImpl; |
| | | import com.stylefeng.guns.core.util.GpsCoordinateUtils; |
| | | import com.stylefeng.guns.core.util.ToolUtil; |
| | | import com.stylefeng.guns.modular.crossCity.dao.LinePriceMapper; |
| | | import com.stylefeng.guns.modular.crossCity.dao.LineShiftDriverMapper; |
| | |
| | | import com.stylefeng.guns.modular.crossCity.server.ILineService; |
| | | import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService; |
| | | import com.stylefeng.guns.modular.crossCity.warpper.OrderCrossCityWarpper; |
| | | import com.stylefeng.guns.modular.crossCity.warpper.OrderCrossCityWarpperPushOrder; |
| | | 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 org.springframework.transaction.annotation.Isolation; |
| | | import org.springframework.transaction.annotation.Propagation; |
| | | import org.springframework.transaction.annotation.Transactional; |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.springframework.util.LinkedMultiValueMap; |
| | | import org.springframework.util.MultiValueMap; |
| | | import org.springframework.web.client.RestTemplate; |
| | |
| | | import java.math.BigDecimal; |
| | | import java.math.MathContext; |
| | | import java.math.RoundingMode; |
| | | import java.time.LocalDateTime; |
| | | import java.time.format.DateTimeFormatter; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | import static com.stylefeng.guns.modular.taxi.service.impl.OrderTaxiServiceImpl.orderIds; |
| | | |
| | |
| | | |
| | | @Autowired |
| | | private IOpenCityService openCityService; |
| | | |
| | | @Autowired |
| | | private PayMoneyUtil payMoneyUtil; |
| | | @Autowired |
| | | private ICompanyService companyService; |
| | | @Value("${callbackPath}") |
| | | private String callbackPath; |
| | | |
| | | public static List<Integer> crossCityOrderIds = new ArrayList<>(); |
| | | |
| | | public Map<String, Thread> threadMap = new HashMap<>(); |
| | | |
| | |
| | | */ |
| | | @Override |
| | | public Map<String, Object> queryBalance(Integer orderId, Integer uid) throws Exception { |
| | | System.err.println(orderId); |
| | | Map<String, Object> map = new HashMap<>(); |
| | | UserInfo userInfo = userInfoService.selectById(uid); |
| | | map.put("balance", userInfo.getBalance()); |
| | | OrderCrossCity orderCrossCity = this.selectById(orderId); |
| | | int i = userCouponRecordService.queryAvailable(uid, orderCrossCity.getCompanyId(), 1, 3, orderCrossCity.getOrderMoney()); |
| | | i = i + userCouponRecordService.queryAvailable(uid, orderCrossCity.getCompanyId(), 1, 0, orderCrossCity.getOrderMoney()); |
| | | map.put("coupon", i); |
| | | List<Map<String, Object>> list = userCouponRecordService.queryAvailable_(uid, orderCrossCity.getCompanyId(), 1, 3, orderCrossCity.getOrderMoney()); |
| | | List<Map<String, Object>> list1 = userCouponRecordService.queryAvailable_(uid, orderCrossCity.getCompanyId(), 1, 0, orderCrossCity.getOrderMoney()); |
| | | list.addAll(list1); |
| | | Iterator<Map<String, Object>> iterator = list.iterator(); |
| | | System.err.println(list); |
| | | while (iterator.hasNext()){ |
| | | Map<String, Object> next = iterator.next(); |
| | | if(next.get("type").equals(2) && (Double.valueOf(next.get("money").toString()) > orderCrossCity.getOrderMoney() |
| | | || Double.valueOf(next.get("fullMoney").toString()) > orderCrossCity.getOrderMoney())){ |
| | | iterator.remove(); |
| | | } |
| | | } |
| | | map.put("coupon", list.size()); |
| | | return map; |
| | | } |
| | | |
| | |
| | | List<Map<String, Object>> list = userCouponRecordService.queryCoupon(uid, orderCrossCity.getCompanyId(), 1, 3, orderCrossCity.getOrderMoney(), pageNum, size); |
| | | List<Map<String, Object>> list1 = userCouponRecordService.queryCoupon(uid, orderCrossCity.getCompanyId(), 1, 0, orderCrossCity.getOrderMoney(), pageNum, size); |
| | | list.addAll(list1); |
| | | return list; |
| | | Iterator<Map<String, Object>> iterator = list.iterator(); |
| | | System.err.println(list); |
| | | while (iterator.hasNext()){ |
| | | Map<String, Object> next = iterator.next(); |
| | | if(next.get("type").equals(2) && (Double.valueOf(next.get("money").toString()) > orderCrossCity.getOrderMoney() |
| | | || Double.valueOf(next.get("fullMoney").toString()) > orderCrossCity.getOrderMoney())){ |
| | | iterator.remove(); |
| | | } |
| | | } |
| | | if(CollectionUtils.isEmpty(list)){ |
| | | return list; |
| | | } |
| | | List<Integer> ids = list.stream().map(map -> Integer.parseInt(map.get("id").toString())).collect(Collectors.toList()); |
| | | List<Map<String, Object>> result = userCouponRecordService.queryCouponCrossCity(ids, pageNum, size); |
| | | System.err.println(result); |
| | | return result; |
| | | } |
| | | |
| | | |
| | | // /** |
| | | // * 订单支付 |
| | | // * @param payType |
| | | // * @param orderId |
| | | // * @param couponId |
| | | // * @param type |
| | | // * @return |
| | | // * @throws Exception |
| | | // */ |
| | | // @Override |
| | | // public ResultUtil payCrossCityOrder(Integer payType, Integer orderId, Integer couponId, Integer type) throws Exception { |
| | | // OrderCrossCity orderCrossCity = this.selectById(orderId); |
| | | // if(orderCrossCity.getState() != 7){ |
| | | // return ResultUtil.error("订单已完成支付,不允许重复支付", ""); |
| | | // } |
| | | // Integer uid = orderCrossCity.getUserId(); |
| | | // Double orderMoney = orderCrossCity.getOrderMoney(); |
| | | // System.err.println(orderMoney); |
| | | // UserInfo userInfo = userInfoService.selectById(uid); |
| | | // ResultUtil resultUtil = ResultUtil.success(""); |
| | | // orderCrossCity.setCouponMoney(0D);//初始化历史数据 |
| | | // orderCrossCity.setCouponId(null); |
| | | // |
| | | // //计算优惠券 |
| | | // BigDecimal payMoney = new BigDecimal(0); |
| | | // UserCouponRecord userCouponRecord = null; |
| | | // if(null != couponId){ |
| | | // userCouponRecord = userCouponRecordService.selectById(couponId); |
| | | // if(userCouponRecord.getCompanyId() != orderCrossCity.getCompanyId()){ |
| | | // return ResultUtil.error("优惠券不能用于此订单", ""); |
| | | // } |
| | | // if(userCouponRecord.getState() == 2){ |
| | | // return ResultUtil.error("优惠券已使用", ""); |
| | | // } |
| | | // if(userCouponRecord.getState() == 3){ |
| | | // return ResultUtil.error("优惠券已过期", ""); |
| | | // } |
| | | // if(userCouponRecord.getCouponUseType() != 0 && userCouponRecord.getCouponUseType() != 3){ |
| | | // return ResultUtil.error("优惠券不能用于此类型订单", ""); |
| | | // } |
| | | // if(userCouponRecord.getCouponType() == 2 && orderMoney.compareTo(userCouponRecord.getFullMoney()) < 0){ |
| | | // return ResultUtil.error("优惠券不能用于此订单", ""); |
| | | // } |
| | | // payMoney = new BigDecimal(orderMoney.toString()).subtract(new BigDecimal(userCouponRecord.getMoney())); |
| | | // System.err.println(payMoney); |
| | | // orderCrossCity.setCouponMoney(userCouponRecord.getMoney()); |
| | | // orderCrossCity.setCouponId(couponId); |
| | | // } |
| | | // if(payMoney.compareTo(new BigDecimal(0)) == 0 ){ |
| | | // payMoney = new BigDecimal(orderMoney.toString()); |
| | | // } |
| | | // //计算红包 |
| | | // UserRedPacketRecord query = userRedPacketRecordService.query(uid, orderCrossCity.getCompanyId(), 1, 3, orderMoney); |
| | | //// if(null != query && orderMoney.compareTo(query.getMoney()) > 0){ |
| | | //// orderMoney = orderMoney - query.getMoney(); |
| | | //// orderCrossCity.setRedPacketMoney(query.getMoney()); |
| | | //// orderCrossCity.setRedPacketId(query.getId()); |
| | | //// } |
| | | //// |
| | | //// //计算折扣 |
| | | //// UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderCrossCity.getCompanyId()); |
| | | //// if(null != query2){ |
| | | //// Double special = query2.getSpecial(); |
| | | //// orderCrossCity.setDiscount(special); |
| | | //// double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); |
| | | //// if(orderMoney.compareTo(v) > 0){ |
| | | //// orderCrossCity.setDiscountMoney(orderMoney - v); |
| | | //// orderCrossCity.setActivityId(query2.getId()); |
| | | //// orderMoney = v; |
| | | //// } |
| | | //// } |
| | | // 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<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",3", 9, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/wxPayOrderTaxi", "", type, appletsOpenId); |
| | | //// if(map.get("code").equals("200")){ |
| | | //// paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, orderMoney, map.get("order_id"), 1);//添加预支付数据 |
| | | //// resultUtil = ResultUtil.success(map.get("data")); |
| | | //// }else{ |
| | | //// resultUtil = ResultUtil.error(map.get("msg"), ""); |
| | | //// } |
| | | // String app = type == 1 ? "APP" : "JSAPI"; |
| | | // resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), payMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); |
| | | // paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, Double.valueOf(payMoney.toString()), "", 1);//添加预支付数据 |
| | | // } |
| | | // if(payType == 2){//支付宝支付 |
| | | // Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",3", 10, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/aliPayOrderTaxi", "", type, null); |
| | | // if(map.get("code").equals("200")){ |
| | | // paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 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(orderCrossCity.getCompanyId()); |
| | | // userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 |
| | | // |
| | | // //添加交易明细 |
| | | // transactionDetailsService.saveData(uid, "完成订单", orderMoney, 2, 1, 1, 3, orderId); |
| | | // userInfoService.updateById(userInfo); |
| | | // |
| | | // orderCrossCity.setState(2);//跨城支付完成后才开始服务 |
| | | // orderCrossCity.setPayType(3); |
| | | // orderCrossCity.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); |
| | | // } |
| | | // |
| | | // //添加已收入明细 |
| | | // Line line = lineService.selectById(orderCrossCity.getLineId()); |
| | | // Double speMoney = Double.valueOf(line.getRakeRate()); |
| | | // BigDecimal d = new BigDecimal(orderCrossCity.getOrderMoney()).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_EVEN);//企业收入 |
| | | // BigDecimal c = new BigDecimal(orderCrossCity.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);//司机收入 |
| | | // incomeService.saveData(1, orderCrossCity.getCompanyId(), 2, orderCrossCity.getId(), 3, d.doubleValue()); |
| | | // incomeService.saveData(2, orderCrossCity.getDriverId(), 2, orderCrossCity.getId(), 3, c.doubleValue()); |
| | | // Driver driver = driverService.selectById(orderCrossCity.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, orderCrossCity.getUserId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); |
| | | // pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); |
| | | // pushUtil.pushDriverPosition(orderCrossCity.getId(), 3); |
| | | // } |
| | | // }).start(); |
| | | // |
| | | // systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); |
| | | // } |
| | | // |
| | | // this.updateAllColumnById(orderCrossCity); |
| | | // return resultUtil; |
| | | // } |
| | | /** |
| | | * 订单支付 |
| | | * @param payType |
| | |
| | | } |
| | | Integer uid = orderCrossCity.getUserId(); |
| | | Double orderMoney = orderCrossCity.getOrderMoney(); |
| | | System.err.println(orderMoney); |
| | | UserInfo userInfo = userInfoService.selectById(uid); |
| | | ResultUtil resultUtil = ResultUtil.success(""); |
| | | orderCrossCity.setCouponMoney(0D);//初始化历史数据 |
| | | orderCrossCity.setCouponId(null); |
| | | if (orderCrossCity.getDriverId() != null) { |
| | | |
| | | //计算优惠券 |
| | | UserCouponRecord userCouponRecord = null; |
| | | if(null != couponId){ |
| | | userCouponRecord = userCouponRecordService.selectById(couponId); |
| | | if(userCouponRecord.getCompanyId() != orderCrossCity.getCompanyId()){ |
| | | return ResultUtil.error("优惠券不能用于此订单", ""); |
| | | //计算优惠券 |
| | | BigDecimal payMoney = new BigDecimal(0); |
| | | UserCouponRecord userCouponRecord = null; |
| | | if (null != couponId) { |
| | | userCouponRecord = userCouponRecordService.selectById(couponId); |
| | | if (userCouponRecord.getCompanyId() != orderCrossCity.getCompanyId()) { |
| | | return ResultUtil.error("优惠券不能用于此订单", ""); |
| | | } |
| | | if (userCouponRecord.getState() == 2) { |
| | | return ResultUtil.error("优惠券已使用", ""); |
| | | } |
| | | if (userCouponRecord.getState() == 3) { |
| | | return ResultUtil.error("优惠券已过期", ""); |
| | | } |
| | | if (userCouponRecord.getCouponUseType() != 0 && userCouponRecord.getCouponUseType() != 3) { |
| | | return ResultUtil.error("优惠券不能用于此类型订单", ""); |
| | | } |
| | | if (userCouponRecord.getCouponType() == 2 && orderMoney.compareTo(userCouponRecord.getFullMoney()) < 0) { |
| | | return ResultUtil.error("优惠券不能用于此订单", ""); |
| | | } |
| | | payMoney = new BigDecimal(orderMoney.toString()).subtract(new BigDecimal(userCouponRecord.getMoney())); |
| | | System.err.println(payMoney); |
| | | orderCrossCity.setCouponMoney(userCouponRecord.getMoney()); |
| | | orderCrossCity.setCouponId(couponId); |
| | | } |
| | | if(userCouponRecord.getState() == 2){ |
| | | return ResultUtil.error("优惠券已使用", ""); |
| | | if (payMoney.compareTo(new BigDecimal(0)) == 0) { |
| | | payMoney = new BigDecimal(orderMoney.toString()); |
| | | } |
| | | if(userCouponRecord.getState() == 3){ |
| | | return ResultUtil.error("优惠券已过期", ""); |
| | | //计算红包 |
| | | UserRedPacketRecord query = userRedPacketRecordService.query(uid, orderCrossCity.getCompanyId(), 1, 3, orderMoney); |
| | | // if(null != query && orderMoney.compareTo(query.getMoney()) > 0){ |
| | | // orderMoney = orderMoney - query.getMoney(); |
| | | // orderCrossCity.setRedPacketMoney(query.getMoney()); |
| | | // orderCrossCity.setRedPacketId(query.getId()); |
| | | // } |
| | | // |
| | | // //计算折扣 |
| | | // UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderCrossCity.getCompanyId()); |
| | | // if(null != query2){ |
| | | // Double special = query2.getSpecial(); |
| | | // orderCrossCity.setDiscount(special); |
| | | // double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); |
| | | // if(orderMoney.compareTo(v) > 0){ |
| | | // orderCrossCity.setDiscountMoney(orderMoney - v); |
| | | // orderCrossCity.setActivityId(query2.getId()); |
| | | // orderMoney = v; |
| | | // } |
| | | // } |
| | | 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<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",3", 9, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/wxPayOrderTaxi", "", type, appletsOpenId); |
| | | // if(map.get("code").equals("200")){ |
| | | // paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, orderMoney, map.get("order_id"), 1);//添加预支付数据 |
| | | // resultUtil = ResultUtil.success(map.get("data")); |
| | | // }else{ |
| | | // resultUtil = ResultUtil.error(map.get("msg"), ""); |
| | | // } |
| | | String app = type == 1 ? "APP" : "JSAPI"; |
| | | resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), payMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); |
| | | paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, Double.valueOf(payMoney.toString()), "", 1);//添加预支付数据 |
| | | } |
| | | if(userCouponRecord.getCouponUseType() != 0 && userCouponRecord.getCouponUseType() != 3){ |
| | | return ResultUtil.error("优惠券不能用于此类型订单", ""); |
| | | if (payType == 2) {//支付宝支付 |
| | | Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",3", 10, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/aliPayOrderTaxi", "", type, null); |
| | | if (map.get("code").equals("200")) { |
| | | paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 2, orderMoney, map.get("order_id"), 1);//添加预支付数据 |
| | | resultUtil = ResultUtil.success(map.get("data")); |
| | | } else { |
| | | resultUtil = ResultUtil.error(map.get("msg"), ""); |
| | | } |
| | | } |
| | | if(userCouponRecord.getCouponType() == 2 && orderMoney.compareTo(userCouponRecord.getFullMoney()) < 0){ |
| | | return ResultUtil.error("优惠券不能用于此订单", ""); |
| | | } |
| | | orderMoney = orderMoney - userCouponRecord.getMoney(); |
| | | orderCrossCity.setCouponMoney(userCouponRecord.getMoney()); |
| | | orderCrossCity.setCouponId(couponId); |
| | | } |
| | | if (payType == 3) {//余额支付 |
| | | if (userInfo.getBalance() == null || userInfo.getBalance() < orderMoney) { |
| | | return ResultUtil.error("余额不足,无法完成支付", ""); |
| | | } |
| | | |
| | | //计算红包 |
| | | UserRedPacketRecord query = userRedPacketRecordService.query(uid, orderCrossCity.getCompanyId(), 1, 3, orderMoney); |
| | | if(null != query && orderMoney.compareTo(query.getMoney()) > 0){ |
| | | orderMoney = orderMoney - query.getMoney(); |
| | | orderCrossCity.setRedPacketMoney(query.getMoney()); |
| | | orderCrossCity.setRedPacketId(query.getId()); |
| | | } |
| | | userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | |
| | | //计算折扣 |
| | | UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderCrossCity.getCompanyId()); |
| | | if(null != query2){ |
| | | Double special = query2.getSpecial(); |
| | | orderCrossCity.setDiscount(special); |
| | | double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); |
| | | if(orderMoney.compareTo(v) > 0){ |
| | | orderCrossCity.setDiscountMoney(orderMoney - v); |
| | | orderCrossCity.setActivityId(query2.getId()); |
| | | orderMoney = v; |
| | | SysIntegral query1 = sysIntegralMapper.query(orderCrossCity.getCompanyId()); |
| | | userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 |
| | | |
| | | //添加交易明细 |
| | | transactionDetailsService.saveData(uid, "完成订单", orderMoney, 2, 1, 1, 3, orderId); |
| | | userInfoService.updateById(userInfo); |
| | | |
| | | orderCrossCity.setState(2);//跨城支付完成后才开始服务 |
| | | orderCrossCity.setPayType(3); |
| | | orderCrossCity.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); |
| | | } |
| | | |
| | | //添加已收入明细 |
| | | Line line = lineService.selectById(orderCrossCity.getLineId()); |
| | | Double speMoney = Double.valueOf(line.getRakeRate()); |
| | | BigDecimal d = new BigDecimal(orderCrossCity.getOrderMoney()).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_EVEN);//企业收入 |
| | | BigDecimal c = new BigDecimal(orderCrossCity.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);//司机收入 |
| | | incomeService.saveData(1, orderCrossCity.getCompanyId(), 2, orderCrossCity.getId(), 3, d.doubleValue()); |
| | | incomeService.saveData(2, orderCrossCity.getDriverId(), 2, orderCrossCity.getId(), 3, c.doubleValue()); |
| | | Driver driver = driverService.selectById(orderCrossCity.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, orderCrossCity.getUserId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); |
| | | pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); |
| | | pushUtil.pushDriverPosition(orderCrossCity.getId(), 3); |
| | | } |
| | | }).start(); |
| | | |
| | | systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 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(); |
| | | }else { |
| | | //没有指定司机 |
| | | //计算优惠券 |
| | | BigDecimal payMoney = new BigDecimal(0); |
| | | UserCouponRecord userCouponRecord = null; |
| | | if(null != couponId){ |
| | | userCouponRecord = userCouponRecordService.selectById(couponId); |
| | | if(userCouponRecord.getCompanyId() != null){ |
| | | return ResultUtil.error("优惠券不能用于此订单", ""); |
| | | } |
| | | if(userCouponRecord.getState() == 2){ |
| | | return ResultUtil.error("优惠券已使用", ""); |
| | | } |
| | | if(userCouponRecord.getState() == 3){ |
| | | return ResultUtil.error("优惠券已过期", ""); |
| | | } |
| | | if(userCouponRecord.getCouponUseType() != 0 && userCouponRecord.getCouponUseType() != 3){ |
| | | return ResultUtil.error("优惠券不能用于此类型订单", ""); |
| | | } |
| | | if(userCouponRecord.getCouponType() == 2 && orderMoney.compareTo(userCouponRecord.getFullMoney()) < 0){ |
| | | return ResultUtil.error("优惠券不能用于此订单", ""); |
| | | } |
| | | payMoney = new BigDecimal(orderMoney.toString()).subtract(new BigDecimal(userCouponRecord.getMoney())); |
| | | System.err.println(payMoney); |
| | | orderCrossCity.setCouponMoney(userCouponRecord.getMoney()); |
| | | orderCrossCity.setCouponId(couponId); |
| | | } |
| | | Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",3", 9, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/wxPayOrderTaxi", "", type, appletsOpenId); |
| | | if(map.get("code").equals("200")){ |
| | | paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, orderMoney, map.get("order_id"), 1);//添加预支付数据 |
| | | resultUtil = ResultUtil.success(map.get("data")); |
| | | }else{ |
| | | resultUtil = ResultUtil.error(map.get("msg"), ""); |
| | | if(payMoney.compareTo(new BigDecimal(0)) == 0 ){ |
| | | payMoney = new BigDecimal(orderMoney.toString()); |
| | | } |
| | | } |
| | | if(payType == 2){//支付宝支付 |
| | | Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",3", 10, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/aliPayOrderTaxi", "", type, null); |
| | | if(map.get("code").equals("200")){ |
| | | paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 2, orderMoney, map.get("order_id"), 1);//添加预支付数据 |
| | | resultUtil = ResultUtil.success(map.get("data")); |
| | | }else{ |
| | | resultUtil = ResultUtil.error(map.get("msg"), ""); |
| | | //计算红包 |
| | | //TODO:红包是否必须指定公司,必须要公司则不能用红包 |
| | | // UserRedPacketRecord query = userRedPacketRecordService.query(uid, orderCrossCity.getCompanyId(), 1, 3, orderMoney); |
| | | // if(null != query && orderMoney.compareTo(query.getMoney()) > 0){ |
| | | // orderMoney = orderMoney - query.getMoney(); |
| | | // orderCrossCity.setRedPacketMoney(query.getMoney()); |
| | | // orderCrossCity.setRedPacketId(query.getId()); |
| | | // } |
| | | // |
| | | // //计算折扣 |
| | | // UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderCrossCity.getCompanyId()); |
| | | // if(null != query2){ |
| | | // Double special = query2.getSpecial(); |
| | | // orderCrossCity.setDiscount(special); |
| | | // double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); |
| | | // if(orderMoney.compareTo(v) > 0){ |
| | | // orderCrossCity.setDiscountMoney(orderMoney - v); |
| | | // orderCrossCity.setActivityId(query2.getId()); |
| | | // orderMoney = v; |
| | | // } |
| | | // } |
| | | 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<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",3", 9, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/wxPayOrderTaxi", "", type, appletsOpenId); |
| | | // if(map.get("code").equals("200")){ |
| | | // paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, orderMoney, map.get("order_id"), 1);//添加预支付数据 |
| | | // resultUtil = ResultUtil.success(map.get("data")); |
| | | // }else{ |
| | | // resultUtil = ResultUtil.error(map.get("msg"), ""); |
| | | // } |
| | | String app = type == 1 ? "APP" : "JSAPI"; |
| | | resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), payMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); |
| | | paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, Double.valueOf(payMoney.toString()), "", 1);//添加预支付数据 |
| | | } |
| | | } |
| | | if(payType == 3){//余额支付 |
| | | if(userInfo.getBalance() == null || userInfo.getBalance() < orderMoney){ |
| | | return ResultUtil.error("余额不足,无法完成支付", ""); |
| | | if(payType == 2){//支付宝支付 |
| | | Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",3", 10, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/aliPayOrderTaxi", "", type, null); |
| | | if(map.get("code").equals("200")){ |
| | | paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 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()); |
| | | userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | |
| | | SysIntegral query1 = sysIntegralMapper.query(orderCrossCity.getCompanyId()); |
| | | userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 |
| | | // SysIntegral query1 = sysIntegralMapper.query(orderCrossCity.getCompanyId()); |
| | | // userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 |
| | | |
| | | //添加交易明细 |
| | | transactionDetailsService.saveData(uid, "完成订单", orderMoney, 2, 1, 1, 3, orderId); |
| | | userInfoService.updateById(userInfo); |
| | | //添加交易明细 |
| | | transactionDetailsService.saveData(uid, "完成订单", orderMoney, 2, 1, 1, 3, orderId); |
| | | userInfoService.updateById(userInfo); |
| | | |
| | | orderCrossCity.setState(2);//跨城支付完成后才开始服务 |
| | | orderCrossCity.setPayType(3); |
| | | orderCrossCity.setPayMoney(orderMoney); |
| | | orderCrossCity.setState(1);//跨城支付完成后才开始推单 |
| | | orderCrossCity.setPayType(3); |
| | | orderCrossCity.setPayMoney(orderMoney); |
| | | |
| | | //处理优惠券和红包 |
| | | if(null != userCouponRecord){ |
| | | userCouponRecord.setState(2); |
| | | userCouponRecord.setEndTime(new Date()); |
| | | userCouponRecordService.updateById(userCouponRecord); |
| | | //处理优惠券和红包 |
| | | 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); |
| | | // } |
| | | |
| | | //添加已收入明细 |
| | | // Line line = lineService.selectById(orderCrossCity.getLineId()); |
| | | // Double speMoney = Double.valueOf(line.getRakeRate()); |
| | | // BigDecimal d = new BigDecimal(orderCrossCity.getOrderMoney()).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_EVEN);//企业收入 |
| | | // BigDecimal c = new BigDecimal(orderCrossCity.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);//司机收入 |
| | | // incomeService.saveData(1, orderCrossCity.getCompanyId(), 2, orderCrossCity.getId(), 3, d.doubleValue()); |
| | | // incomeService.saveData(2, orderCrossCity.getDriverId(), 2, orderCrossCity.getId(), 3, c.doubleValue()); |
| | | // Driver driver = driverService.selectById(orderCrossCity.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, orderCrossCity.getUserId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); |
| | | // pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); |
| | | // pushUtil.pushDriverPosition(orderCrossCity.getId(), 3); |
| | | // } |
| | | // }).start(); |
| | | |
| | | systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); |
| | | } |
| | | if(null != query){ |
| | | query.setState(2); |
| | | query.setEndTime(new Date()); |
| | | userRedPacketRecordService.updateById(query); |
| | | } |
| | | |
| | | //添加已收入明细 |
| | | Line line = lineService.selectById(orderCrossCity.getLineId()); |
| | | Double speMoney = Double.valueOf(line.getRakeRate()); |
| | | BigDecimal d = new BigDecimal(orderCrossCity.getOrderMoney()).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_EVEN);//企业收入 |
| | | BigDecimal c = new BigDecimal(orderCrossCity.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);//司机收入 |
| | | incomeService.saveData(1, orderCrossCity.getCompanyId(), 2, orderCrossCity.getId(), 3, d.doubleValue()); |
| | | incomeService.saveData(2, orderCrossCity.getDriverId(), 2, orderCrossCity.getId(), 3, c.doubleValue()); |
| | | Driver driver = driverService.selectById(orderCrossCity.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, orderCrossCity.getUserId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); |
| | | pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); |
| | | pushUtil.pushDriverPosition(orderCrossCity.getId(), 3); |
| | | // 支付成功后,触发推单(异步执行,不阻塞支付响应) |
| | | new Thread(() -> { |
| | | try { |
| | | //推单操作 |
| | | if(orderCrossCity.getState() == 1){ |
| | | this.pushCrossCityOrder(orderCrossCity); |
| | | System.out.println("推单!!"); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | }).start(); |
| | | |
| | | systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); |
| | | } |
| | | |
| | | this.updateAllColumnById(orderCrossCity); |
| | | |
| | | return resultUtil; |
| | | } |
| | | |
| | | // /** |
| | | // * 订单支付(推单场景) |
| | | // * @param payType |
| | | // * @param orderId |
| | | // * @param couponId |
| | | // * @param type |
| | | // * @return |
| | | // * @throws Exception |
| | | // */ |
| | | // @Override |
| | | // public ResultUtil payCrossCityOrder2(Integer payType, Integer orderId, Integer couponId, Integer type) throws Exception { |
| | | // OrderCrossCity orderCrossCity = this.selectById(orderId); |
| | | // if(orderCrossCity.getState() != 7){ |
| | | // return ResultUtil.error("订单已完成支付,不允许重复支付", ""); |
| | | // } |
| | | // Integer uid = orderCrossCity.getUserId(); |
| | | // Double orderMoney = orderCrossCity.getOrderMoney(); |
| | | // System.err.println(orderMoney); |
| | | // UserInfo userInfo = userInfoService.selectById(uid); |
| | | // ResultUtil resultUtil = ResultUtil.success(""); |
| | | // orderCrossCity.setCouponMoney(0D);//初始化历史数据 |
| | | // orderCrossCity.setCouponId(null); |
| | | // |
| | | // //计算优惠券 |
| | | // BigDecimal payMoney = new BigDecimal(0); |
| | | // UserCouponRecord userCouponRecord = null; |
| | | // if(null != couponId){ |
| | | // userCouponRecord = userCouponRecordService.selectById(couponId); |
| | | // if(userCouponRecord.getCompanyId() != orderCrossCity.getCompanyId()){ |
| | | // return ResultUtil.error("优惠券不能用于此订单", ""); |
| | | // } |
| | | // if(userCouponRecord.getState() == 2){ |
| | | // return ResultUtil.error("优惠券已使用", ""); |
| | | // } |
| | | // if(userCouponRecord.getState() == 3){ |
| | | // return ResultUtil.error("优惠券已过期", ""); |
| | | // } |
| | | // if(userCouponRecord.getCouponUseType() != 0 && userCouponRecord.getCouponUseType() != 3){ |
| | | // return ResultUtil.error("优惠券不能用于此类型订单", ""); |
| | | // } |
| | | // if(userCouponRecord.getCouponType() == 2 && orderMoney.compareTo(userCouponRecord.getFullMoney()) < 0){ |
| | | // return ResultUtil.error("优惠券不能用于此订单", ""); |
| | | // } |
| | | // payMoney = new BigDecimal(orderMoney.toString()).subtract(new BigDecimal(userCouponRecord.getMoney())); |
| | | // System.err.println(payMoney); |
| | | // orderCrossCity.setCouponMoney(userCouponRecord.getMoney()); |
| | | // orderCrossCity.setCouponId(couponId); |
| | | // } |
| | | // if(payMoney.compareTo(new BigDecimal(0)) == 0 ){ |
| | | // payMoney = new BigDecimal(orderMoney.toString()); |
| | | // } |
| | | // //计算红包 |
| | | // UserRedPacketRecord query = userRedPacketRecordService.query(uid, orderCrossCity.getCompanyId(), 1, 3, orderMoney); |
| | | //// if(null != query && orderMoney.compareTo(query.getMoney()) > 0){ |
| | | //// orderMoney = orderMoney - query.getMoney(); |
| | | //// orderCrossCity.setRedPacketMoney(query.getMoney()); |
| | | //// orderCrossCity.setRedPacketId(query.getId()); |
| | | //// } |
| | | //// |
| | | //// //计算折扣 |
| | | //// UserActivityDiscount1 query2 = userActivityDiscount1Mapper.query(orderCrossCity.getCompanyId()); |
| | | //// if(null != query2){ |
| | | //// Double special = query2.getSpecial(); |
| | | //// orderCrossCity.setDiscount(special); |
| | | //// double v = new BigDecimal(orderMoney).multiply(new BigDecimal(special / 10)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue(); |
| | | //// if(orderMoney.compareTo(v) > 0){ |
| | | //// orderCrossCity.setDiscountMoney(orderMoney - v); |
| | | //// orderCrossCity.setActivityId(query2.getId()); |
| | | //// orderMoney = v; |
| | | //// } |
| | | //// } |
| | | // 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<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",3", 9, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/wxPayOrderTaxi", "", type, appletsOpenId); |
| | | //// if(map.get("code").equals("200")){ |
| | | //// paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, orderMoney, map.get("order_id"), 1);//添加预支付数据 |
| | | //// resultUtil = ResultUtil.success(map.get("data")); |
| | | //// }else{ |
| | | //// resultUtil = ResultUtil.error(map.get("msg"), ""); |
| | | //// } |
| | | // String app = type == 1 ? "APP" : "JSAPI"; |
| | | // resultUtil = payMoneyUtil.weixinpay("完成订单", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), payMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); |
| | | // paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, Double.valueOf(payMoney.toString()), "", 1);//添加预支付数据 |
| | | // } |
| | | // if(payType == 2){//支付宝支付 |
| | | // Map<String, String> map = icbcPayUtil.placeAnOrder(orderId + ",3", 10, 5, uid.toString(), "完成订单", orderMoney, callbackPath + "/base/aliPayOrderTaxi", "", type, null); |
| | | // if(map.get("code").equals("200")){ |
| | | // paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 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(orderCrossCity.getCompanyId()); |
| | | // userInfo.setIntegral(userInfo.getIntegral() + (orderMoney.intValue() * query1.getIntegral()));//积分 |
| | | // |
| | | // //添加交易明细 |
| | | // transactionDetailsService.saveData(uid, "完成订单", orderMoney, 2, 1, 1, 3, orderId); |
| | | // userInfoService.updateById(userInfo); |
| | | // |
| | | // orderCrossCity.setState(2);//跨城支付完成后才开始服务 |
| | | // orderCrossCity.setPayType(3); |
| | | // orderCrossCity.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); |
| | | // } |
| | | // |
| | | // //添加已收入明细 |
| | | // Line line = lineService.selectById(orderCrossCity.getLineId()); |
| | | // Double speMoney = Double.valueOf(line.getRakeRate()); |
| | | // BigDecimal d = new BigDecimal(orderCrossCity.getOrderMoney()).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_EVEN);//企业收入 |
| | | // BigDecimal c = new BigDecimal(orderCrossCity.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);//司机收入 |
| | | // incomeService.saveData(1, orderCrossCity.getCompanyId(), 2, orderCrossCity.getId(), 3, d.doubleValue()); |
| | | // incomeService.saveData(2, orderCrossCity.getDriverId(), 2, orderCrossCity.getId(), 3, c.doubleValue()); |
| | | // |
| | | // systemNoticeService.addSystemNotice(1, "您已使用余额成功完成出行订单支付,谢谢使用!", uid, 1); |
| | | // } |
| | | // |
| | | // this.updateAllColumnById(orderCrossCity); |
| | | // //没有司机,推单操作 |
| | | // if(orderCrossCity.getDriverId() == null && orderCrossCity.getState() == 2){ |
| | | // this.pushCrossCityOrder(orderCrossCity); |
| | | // } |
| | | // return resultUtil; |
| | | // } |
| | | |
| | | /** |
| | | * 支付成功后的回调操作 |
| | |
| | | OrderCrossCity orderCrossCity = this.selectById(id); |
| | | PaymentRecord query = paymentRecordService.query(1, orderCrossCity.getUserId(), 1, Integer.valueOf(id), 3, type, 1); |
| | | if(null != query){ |
| | | Integer placeOrderWay = null; |
| | | switch (orderCrossCity.getOrderSource()){ |
| | | case 2: |
| | | placeOrderWay = 4; |
| | | break; |
| | | case 3: |
| | | placeOrderWay = 4; |
| | | break; |
| | | case 6: |
| | | placeOrderWay = 1; |
| | | break; |
| | | case 7: |
| | | placeOrderWay = 2; |
| | | break; |
| | | case 5: |
| | | placeOrderWay = 3; |
| | | break; |
| | | } |
| | | //添加交易明细 |
| | | transactionDetailsService.saveData(orderCrossCity.getUserId(), "完成订单", query.getAmount(), 2, 1, 1, 3, query.getOrderId()); |
| | | orderCrossCity.setState(2);//先支付再服务 |
| | |
| | | orderCrossCity.setPayMoney(query.getAmount()); |
| | | this.updateById(orderCrossCity); |
| | | |
| | | UserInfo userInfo = userInfoService.selectById(orderCrossCity.getUserId()); |
| | | SysIntegral query1 = sysIntegralMapper.query(orderCrossCity.getCompanyId()); |
| | | userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分 |
| | | userInfoService.updateById(userInfo); |
| | | // UserInfo userInfo = userInfoService.selectById(orderCrossCity.getUserId()); |
| | | // SysIntegral query1 = sysIntegralMapper.query(orderCrossCity.getCompanyId()); |
| | | // userInfo.setIntegral(userInfo.getIntegral() + (query.getAmount().intValue() * query1.getIntegral()));//积分 |
| | | // userInfoService.updateById(userInfo); |
| | | |
| | | //处理优惠券和红包 |
| | | if(null != orderCrossCity.getCouponId()){ |
| | |
| | | paymentRecordService.updateById(query); |
| | | |
| | | //添加已收入明细 |
| | | Line line = lineService.selectById(orderCrossCity.getLineId()); |
| | | Double speMoney = Double.valueOf(line.getRakeRate()); |
| | | BigDecimal d = new BigDecimal(orderCrossCity.getOrderMoney()).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_EVEN);//企业收入 |
| | | BigDecimal c = new BigDecimal(orderCrossCity.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);//司机收入 |
| | | incomeService.saveData(1, orderCrossCity.getCompanyId(), 2, orderCrossCity.getId(), 3, d.doubleValue()); |
| | | incomeService.saveData(2, orderCrossCity.getDriverId(), 2, orderCrossCity.getId(), 3, c.doubleValue()); |
| | | // Line line = lineService.selectById(orderCrossCity.getLineId()); |
| | | // Double speMoney = Double.valueOf(line.getRakeRate()); |
| | | // BigDecimal d = new BigDecimal(orderCrossCity.getOrderMoney()).multiply(new BigDecimal(speMoney).divide(new BigDecimal(100))).setScale(2, BigDecimal.ROUND_HALF_EVEN);//企业收入 |
| | | // BigDecimal c = new BigDecimal(orderCrossCity.getOrderMoney()).subtract(d).setScale(2, BigDecimal.ROUND_HALF_EVEN);//司机收入 |
| | | // incomeService.saveData(1, orderCrossCity.getCompanyId(), 2, orderCrossCity.getId(), 3, d.doubleValue()); |
| | | // incomeService.saveData(2, orderCrossCity.getDriverId(), 2, orderCrossCity.getId(), 3, c.doubleValue()); |
| | | Driver driver = driverService.selectById(orderCrossCity.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); |
| | | // 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); |
| | | |
| | | Company company = companyService.selectById(driver.getFranchiseeId()); |
| | | // if(Objects.isNull(company)){ |
| | | // company = companyService.selectById(driver.getCompanyId()); |
| | | // } |
| | | // // 司机收入 |
| | | // double moneyTwo; |
| | | // // 平台收入 |
| | | // double money; |
| | | // if(orderCrossCity.getOrderSource() == 2 || orderCrossCity.getOrderSource() == 3){ |
| | | // double v = company.getPercentageDeduction() / 100; |
| | | // money = v * orderCrossCity.getOrderMoney(); |
| | | // moneyTwo = orderCrossCity.getOrderMoney()-money; |
| | | // }else { |
| | | // money = company.getFixedDeduction(); |
| | | // moneyTwo = orderCrossCity.getOrderMoney()-money; |
| | | // } |
| | | // driver.setBalance(driver.getBalance() + moneyTwo); |
| | | // // 新增扣除使用费记录 |
| | | // transactionDetailsService.saveDataTaxi(driver.getId(), "软件使用费", money, 2, 1, 2, 6, orderCrossCity.getId(),placeOrderWay,company.getId()); |
| | | // // 司机订单收入 |
| | | // transactionDetailsService.saveDataTaxi(driver.getId(), "完成订单", moneyTwo, 1, 1, 2, 3, orderCrossCity.getId(),placeOrderWay,company.getId()); |
| | | // |
| | | // driverService.updateById(driver); |
| | | |
| | | // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 |
| | | new Thread(new Runnable() { |
| | |
| | | }).start(); |
| | | |
| | | |
| | | systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信" : "支付宝") + "成功完成出行订单支付,谢谢使用!", orderCrossCity.getUserId(), 1); |
| | | // systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信" : "支付宝") + "成功完成出行订单支付,谢谢使用!", orderCrossCity.getUserId(), 1); |
| | | //添加司机消息提醒 |
| | | systemNoticeService.addSystemNotice(2, "用户已线上完成支付", driver.getId(), 1); |
| | | }else{ |
| | | System.err.println("预支付数据异常(orderId = " + id + ")"); |
| | | } |
| | |
| | | return ResultUtil.success(baseWarpper); |
| | | } |
| | | |
| | | /** |
| | | * 跨城下单操作(推单场景) |
| | | * @param orderCrossCityWarpperPushOrder |
| | | * @param uid |
| | | * @return |
| | | * @throws Exception |
| | | */ |
| | | @Override |
| | | public synchronized ResultUtil<BaseWarpper> orderCrossCityPushOrder(OrderCrossCityWarpperPushOrder orderCrossCityWarpperPushOrder, Integer uid) throws Exception { |
| | | /** |
| | | * 1.下了即时单就不能下预约单和即时单 |
| | | * 2.下了预约单和再下一张即时单不能再下预约单 |
| | | */ |
| | | List<OrderPrivateCar> orderPrivateCars = orderPrivateCarMapper.queryByState(uid, 1, 1, 1, 2, 3, 4, 5, 6, 7, 11); |
| | | if(orderPrivateCars.size() > 0){ |
| | | return ResultUtil.error("有未完成的订单"); |
| | | } |
| | | List<OrderTaxi> list = orderTaxiMapper.queryByState_(uid, 1, 1, 1, 2, 3, 4, 5, 6, 11); |
| | | if(list.size() > 0){ |
| | | return ResultUtil.error("有未完成的订单"); |
| | | } |
| | | List<OrderCrossCity> orderCrossCities1 = orderCrossCityMapper.queryByState(uid, 1, 2, 3, 4, 5, 7, 11); |
| | | if(orderCrossCities1.size() > 0){ |
| | | return ResultUtil.error("有未完成的订单"); |
| | | } |
| | | |
| | | if(null == orderCrossCityWarpperPushOrder.getServerCarModelId()){ |
| | | return ResultUtil.error("请选择服务车型"); |
| | | } |
| | | OrderCrossCity orderCrossCity = new OrderCrossCity(); |
| | | orderCrossCity.setUserId(uid); |
| | | orderCrossCity.setServerCarModelId(orderCrossCityWarpperPushOrder.getServerCarModelId()); |
| | | // orderCrossCity.setDriverId(orderCrossCityWarpper.getDriverId()); |
| | | orderCrossCity.setLineId(orderCrossCityWarpperPushOrder.getLineId()); |
| | | // orderCrossCity.setLineShiftDriverId(orderCrossCityWarpper.getLineShiftDriverId()); |
| | | // orderCrossCity.setCarId(orderCrossCityWarpper.getCarId()); |
| | | orderCrossCity.setOrderNum(this.getOrderNum(orderCrossCityWarpperPushOrder.getDriverId(), orderCrossCityWarpperPushOrder.getLineShiftDriverId())); |
| | | orderCrossCity.setPlacementLon(orderCrossCityWarpperPushOrder.getPlacementLon()); |
| | | orderCrossCity.setPlacementLat(orderCrossCityWarpperPushOrder.getPlacementLat()); |
| | | String placementAddress = orderCrossCityWarpperPushOrder.getPlacementAddress(); |
| | | placementAddress = placementAddress.replaceAll("& #40;", "("); |
| | | placementAddress = placementAddress.replaceAll("& #41;", ")"); |
| | | orderCrossCity.setPlacementAddress(placementAddress); |
| | | orderCrossCity.setStartLon(orderCrossCityWarpperPushOrder.getStartLon()); |
| | | orderCrossCity.setStartLat(orderCrossCityWarpperPushOrder.getStartLat()); |
| | | String startAddress = orderCrossCityWarpperPushOrder.getStartAddress(); |
| | | startAddress = startAddress.replaceAll("& #40;", "("); |
| | | startAddress = startAddress.replaceAll("& #41;", ")"); |
| | | orderCrossCity.setStartAddress(startAddress); |
| | | orderCrossCity.setEndLon(orderCrossCityWarpperPushOrder.getEndLon()); |
| | | orderCrossCity.setEndLat(orderCrossCityWarpperPushOrder.getEndLat()); |
| | | String endAddress = orderCrossCityWarpperPushOrder.getEndAddress(); |
| | | endAddress = endAddress.replaceAll("& #40;", "("); |
| | | endAddress = endAddress.replaceAll("& #41;", ")"); |
| | | orderCrossCity.setEndAddress(endAddress); |
| | | orderCrossCity.setMileage(0D); |
| | | ResultUtil<Map<String, Object>> price = this.getPrice(orderCrossCityWarpperPushOrder.getDistance(), orderCrossCityWarpperPushOrder.getPeopleNumber(), orderCrossCityWarpperPushOrder.getTravelMode(), orderCrossCityWarpperPushOrder.getLineId(), |
| | | orderCrossCityWarpperPushOrder.getServerCarModelId(), orderCrossCityWarpperPushOrder.getTotalSeat(), orderCrossCityWarpperPushOrder.getSeatNumber()); |
| | | Double money = Double.valueOf(price.getData().get("price").toString()); |
| | | orderCrossCity.setOrderMoney(money); |
| | | // Integer companyId = driver.getCompanyId(); |
| | | // orderCrossCity.setCompanyId(companyId); |
| | | UserInfo userInfo = userInfoService.selectById(uid); |
| | | orderCrossCity.setPassengers(userInfo.getNickName()); |
| | | orderCrossCity.setPassengersPhone(userInfo.getPhone()); |
| | | orderCrossCity.setPeopleNumber(orderCrossCityWarpperPushOrder.getPeopleNumber()); |
| | | orderCrossCity.setSeatNumber(orderCrossCityWarpperPushOrder.getSeatNumber()); |
| | | List<OrderCrossCity> orderCrossCities = this.selectList(new EntityWrapper<OrderCrossCity>().eq("orderNum", orderCrossCity.getOrderNum()).eq("isDelete", 1)); |
| | | orderCrossCity.setSort(orderCrossCities.size() + 1); |
| | | orderCrossCity.setState(7);//待支付 |
| | | orderCrossCity.setInsertTime(new Date()); |
| | | orderCrossCity.setTravelTime(orderCrossCityWarpperPushOrder.getTravelTime()); |
| | | orderCrossCity.setSnatchOrderTime(new Date()); |
| | | orderCrossCity.setTravelMode(orderCrossCityWarpperPushOrder.getTravelMode()); |
| | | orderCrossCity.setOrderSource(orderCrossCityWarpperPushOrder.getOrderSource()); |
| | | orderCrossCity.setIsDelete(1); |
| | | orderCrossCity.setRemark(orderCrossCityWarpperPushOrder.getRemark()); |
| | | orderCrossCity.setIsReassign(1); |
| | | //调用高德创建轨迹 |
| | | // String s = gdFalconUtil.selectTerminal(driver.getPhone()); |
| | | // String track = gdFalconUtil.createTrack(s); |
| | | // orderCrossCity.setTrackId(track); |
| | | // if (orderCrossCity.getTravelMode() == 2) {//包车 |
| | | // orderCrossCity.setSeatNumber(lineShiftDriver.getLaveSeatNumber()); |
| | | // orderCrossCity.setPeopleNumber(lineShiftDriver.getLaveSeat()); |
| | | // } |
| | | |
| | | //调用移动的小号接口 |
| | | // Map<String, String> geocode = gdMapGeocodingUtil.geocode(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString()); |
| | | // Region region = regionMapper.query(geocode.get("districtCode")); |
| | | // Map<String, String> map = chinaMobileUtil.midAxbBindSend(orderCrossCity.getPassengersPhone(), driver.getPhone(), Integer.valueOf(region.getCitycode().substring(1))); |
| | | // if (String.valueOf(map.get("code")).equals("200")) { |
| | | // orderCrossCity.setTelX(map.get("telX")); |
| | | // orderCrossCity.setBindId(map.get("bindId")); |
| | | // } |
| | | this.insert(orderCrossCity); |
| | | |
| | | // if (driver.getState() == 2) { |
| | | // driver.setState(3); |
| | | // driverService.updateById(driver); |
| | | // } |
| | | |
| | | // //修改预约班次的数据 |
| | | // if (orderCrossCity.getTravelMode() == 2) {//包车 |
| | | // lineShiftDriver.setLaveSeat(0); |
| | | // lineShiftDriver.setLaveSeatNumber(""); |
| | | // } else {//拼车 |
| | | // lineShiftDriver.setLaveSeat((lineShiftDriver.getLaveSeat() - orderCrossCity.getPeopleNumber()) < 0 ? 0 : lineShiftDriver.getLaveSeat() - orderCrossCity.getPeopleNumber()); |
| | | // String[] split = orderCrossCity.getSeatNumber().split(","); |
| | | // String[] split1 = lineShiftDriver.getLaveSeatNumber().split(","); |
| | | // String seatNumber = ""; |
| | | // //先判断选中座位号和剩余座位号是否匹配 |
| | | // for (String spl : split) { |
| | | // boolean b = true; |
| | | // for (String sp : split1) { |
| | | // if (ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)) { |
| | | // b = false; |
| | | // break; |
| | | // } |
| | | // } |
| | | // if (b) { |
| | | // throw new SystemException("您选中的" + spl + "号座位已被占用,请选择其他座位!"); |
| | | // } |
| | | // } |
| | | // for (String sp : split1) { |
| | | // boolean b = true; |
| | | // for (String spl : split) { |
| | | // if (ToolUtil.isNotEmpty(spl) && ToolUtil.isNotEmpty(sp) && sp.equals(spl)) { |
| | | // b = false; |
| | | // break; |
| | | // } |
| | | // } |
| | | // if (b && ToolUtil.isNotEmpty(sp)) { |
| | | // seatNumber += (sp + ","); |
| | | // } |
| | | // } |
| | | // lineShiftDriver.setLaveSeatNumber((ToolUtil.isNotEmpty(seatNumber) && seatNumber.length() > 0) ? |
| | | // seatNumber.substring(0, seatNumber.length() - 1) : ""); |
| | | // } |
| | | // lineShiftDriverMapper.updateById(lineShiftDriver); |
| | | |
| | | //添加消息 |
| | | systemNoticeService.addSystemNotice(1, "您的跨城订单已下单成功!", orderCrossCity.getUserId(), 1); |
| | | |
| | | BaseWarpper baseWarpper = new BaseWarpper(); |
| | | baseWarpper.setId(orderCrossCity.getId()); |
| | | |
| | | //创建定时任务,取消订单30分钟 |
| | | TimerTask timerTask = new TimerTask() { |
| | | @Override |
| | | public void run() { |
| | | OrderCrossCity orderCrossCity1 = orderCrossCityMapper.selectById(orderCrossCity.getId()); |
| | | if(orderCrossCity1.getState() == 7 && orderCrossCity1.getPayMoney() == null){ |
| | | orderCrossCity1.setState(10); |
| | | orderCrossCityMapper.updateById(orderCrossCity1); |
| | | |
| | | OrderCancel orderCancel = new OrderCancel(); |
| | | orderCancel.setOrderId(orderCrossCity.getId()); |
| | | orderCancel.setOrderType(3); |
| | | orderCancel.setReason("用户未及时付款,系统自动取消订单"); |
| | | orderCancel.setRemark("用户未及时付款,系统自动取消订单"); |
| | | orderCancel.setState(2); |
| | | orderCancel.setInsertTime(new Date()); |
| | | orderCancel.setUserType(2); |
| | | orderCancelService.insert(orderCancel); |
| | | |
| | | // //修改司机座位 |
| | | // LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId()); |
| | | // lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber()); |
| | | // lineShiftDriver.setLaveSeatNumber(lineShiftDriver.getLaveSeatNumber() + (orderCrossCity.getTravelMode() == 1 ? "," : "") + orderCrossCity.getSeatNumber()); |
| | | // lineShiftDriverMapper.updateById(lineShiftDriver); |
| | | // |
| | | // //修改司机为空闲 |
| | | // List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryByDriverId(orderCrossCity.getDriverId(), 2, 3, 4, 5, 11); |
| | | // if(orderCrossCities.size() == 0){ |
| | | // Driver driver = driverService.selectById(orderCrossCity.getDriverId()); |
| | | // driver.setState(2); |
| | | // driverService.updateById(driver); |
| | | // } |
| | | } |
| | | } |
| | | }; |
| | | Timer timer = new Timer(); |
| | | timer.schedule(timerTask, 30 * 60 * 1000); |
| | | |
| | | return ResultUtil.success(baseWarpper); |
| | | } |
| | | |
| | | /** |
| | | * 获取订单 |
| | |
| | | } |
| | | |
| | | //还原座位 |
| | | CancleOrder query1 = cancleOrderService.query(1, 3, orderCrossCity.getCompanyId()); |
| | | if (null != query1) { |
| | | integer = orderCancelService.saveData(id, 3, reason, remark, null, null, 2, 1, uid); |
| | | orderCrossCity.setState(10); |
| | | this.updateById(orderCrossCity); |
| | | // CancleOrder query1 = cancleOrderService.query(1, 3, orderCrossCity.getCompanyId()); |
| | | // if (null != query1) { |
| | | integer = orderCancelService.saveData(id, 3, reason, remark, null, null, 2, 1, uid); |
| | | orderCrossCity.setState(10); |
| | | this.updateById(orderCrossCity); |
| | | |
| | | if(orderCrossCity.getState() != 7){//已经支付的情况推送给司机提醒 |
| | | new Thread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); |
| | | System.err.println("推送取消操作---------------------"); |
| | | } |
| | | }).start(); |
| | | } |
| | | |
| | | //修改司机座位 |
| | | LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId()); |
| | | lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber()); |
| | | lineShiftDriver.setLaveSeatNumber(lineShiftDriver.getLaveSeatNumber() + (orderCrossCity.getTravelMode() == 1 ? "," : "") + orderCrossCity.getSeatNumber()); |
| | | lineShiftDriverMapper.updateById(lineShiftDriver); |
| | | |
| | | //修改司机为空闲 |
| | | List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryByDriverId(orderCrossCity.getDriverId(), 2, 3, 4, 5, 11); |
| | | if(orderCrossCities.size() == 0){ |
| | | Driver driver = driverService.selectById(orderCrossCity.getDriverId()); |
| | | driver.setState(2); |
| | | driverService.updateById(driver); |
| | | } |
| | | }else{ |
| | | return ResultUtil.error("请完善后台取消规则设置"); |
| | | if(orderCrossCity.getState() != 7){//已经支付的情况推送给司机提醒 |
| | | new Thread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | pushUtil.pushOrderState(2, orderCrossCity.getDriverId(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 0); |
| | | System.err.println("推送取消操作---------------------"); |
| | | } |
| | | }).start(); |
| | | } |
| | | |
| | | //修改司机座位 |
| | | LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId()); |
| | | lineShiftDriver.setLaveSeat(lineShiftDriver.getLaveSeat() + orderCrossCity.getPeopleNumber()); |
| | | lineShiftDriver.setLaveSeatNumber(lineShiftDriver.getLaveSeatNumber() + (orderCrossCity.getTravelMode() == 1 ? "," : "") + orderCrossCity.getSeatNumber()); |
| | | lineShiftDriverMapper.updateById(lineShiftDriver); |
| | | |
| | | //修改司机为空闲 |
| | | List<OrderCrossCity> orderCrossCities = orderCrossCityMapper.queryByDriverId(orderCrossCity.getDriverId(), 2, 3, 4, 5, 11); |
| | | if(orderCrossCities.size() == 0){ |
| | | Driver driver = driverService.selectById(orderCrossCity.getDriverId()); |
| | | driver.setState(2); |
| | | driverService.updateById(driver); |
| | | } |
| | | // } |
| | | // else{ |
| | | // return ResultUtil.error("请完善后台取消规则设置"); |
| | | // } |
| | | |
| | | //已支付的情况下进行退款操作 |
| | | if(null != orderCrossCity.getPayType() && null != orderCrossCity.getPayMoney()){ |
| | |
| | | if(null == query){ |
| | | return ResultUtil.error("订单还未进行支付"); |
| | | } |
| | | Map<String, Object> merrefund = icbcPayUtil.merrefund(query.getCode(), "", query.getAmount(), id + "_3", orderCrossCity.getOrderNum()); |
| | | if(Integer.valueOf(merrefund.get("code").toString()) == 0){ |
| | | Map<String, Object> refundqry = icbcPayUtil.refundqry("", query.getCode(), orderCrossCity.getOrderNum()); |
| | | if(Integer.valueOf(refundqry.get("code").toString()) == 0 && Integer.valueOf(refundqry.get("pay_status").toString()) == 0){//成功 |
| | | //添加交易明细 |
| | | transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城订单取消退款", query.getAmount(), 1, 1, 1, 3, id); |
| | | } |
| | | if(Integer.valueOf(refundqry.get("code").toString()) == 0 && Integer.valueOf(refundqry.get("pay_status").toString()) == 1){//失败 |
| | | return ResultUtil.error("订单取消失败(退款不成功)"); |
| | | } |
| | | if(Integer.valueOf(refundqry.get("code").toString()) == 0 && Integer.valueOf(refundqry.get("pay_status").toString()) == 2){//未知 |
| | | return ResultUtil.error("退款返回未知异常"); |
| | | } |
| | | } |
| | | Map<String, String> merrefund = payMoneyUtil.wxRefund(query.getCode(), orderCrossCity.getOrderNum(), String.valueOf(query.getAmount()), String.valueOf(query.getAmount()), ""); |
| | | System.err.println("跨城退款数据:::"+merrefund); |
| | | //添加交易明细 |
| | | transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城订单取消退款", query.getAmount(), 1, 1, 1, 3, id); |
| | | integer = orderCancelService.saveData(id, 3, reason, remark, null, null, 2, 1, uid); |
| | | } |
| | | |
| | | //添加负的收入明细 |
| | | List<Income> incomes = incomeService.selectList(new EntityWrapper<Income>().eq("type", 2).eq("incomeId", id).eq("orderType", 3)); |
| | | for(Income income : incomes){ |
| | | if(income.getUserType() == 2){//处理司机的收入 |
| | | Driver driver = driverService.selectById(income.getObjectId()); |
| | | driver.setBalance(driver.getBalance() - income.getMoney()); |
| | | driver.setBusinessMoney(driver.getBusinessMoney() - income.getMoney()); |
| | | driver.setLaveBusinessMoney(driver.getLaveBusinessMoney() - income.getMoney()); |
| | | driverService.updateById(driver); |
| | | } |
| | | Income income1 = new Income(); |
| | | BeanUtils.copyProperties(income, income1); |
| | | income1.setMoney(income.getMoney() * -1); |
| | | income1.setId(null); |
| | | income1.setInsertTime(new Date()); |
| | | incomeService.insert(income1); |
| | | } |
| | | // List<Income> incomes = incomeService.selectList(new EntityWrapper<Income>().eq("type", 2).eq("incomeId", id).eq("orderType", 3)); |
| | | // for(Income income : incomes){ |
| | | // if(income.getUserType() == 2){//处理司机的收入 |
| | | // Driver driver = driverService.selectById(income.getObjectId()); |
| | | // driver.setBalance(driver.getBalance() - income.getMoney()); |
| | | // driver.setBusinessMoney(driver.getBusinessMoney() - income.getMoney()); |
| | | // driver.setLaveBusinessMoney(driver.getLaveBusinessMoney() - income.getMoney()); |
| | | // driverService.updateById(driver); |
| | | // } |
| | | // Income income1 = new Income(); |
| | | // BeanUtils.copyProperties(income, income1); |
| | | // income1.setMoney(income.getMoney() * -1); |
| | | // income1.setId(null); |
| | | // income1.setInsertTime(new Date()); |
| | | // incomeService.insert(income1); |
| | | // } |
| | | } |
| | | |
| | | //添加消息 |
| | |
| | | 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)).setScale(2, BigDecimal.ROUND_HALF_EVEN).intValue() + ""; |
| | | d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000),2, BigDecimal.ROUND_HALF_EVEN).toString(); |
| | | t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60),2,BigDecimal.ROUND_HALF_EVEN).toString(); |
| | | } |
| | | OrderServerWarpper orderServerWarpper = new OrderServerWarpper(); |
| | | orderServerWarpper.setOrderId(orderCrossCity.getId()); |
| | |
| | | orderServerWarpper.setState(orderCrossCity.getState()); |
| | | orderServerWarpper.setLon(null != value ? value.split(",")[0] : "0.0"); |
| | | orderServerWarpper.setLat(null != value ? value.split(",")[1] : "0.0"); |
| | | value = value == null ? "0.0,0.0" : value; |
| | | double[] doubles = GpsCoordinateUtils.calBD09toGCJ02(Double.parseDouble(value.split(",")[1]), Double.parseDouble(value.split(",")[0])); |
| | | orderServerWarpper.setNextLongitude(String.valueOf(doubles[0])); |
| | | orderServerWarpper.setNextLatitude(String.valueOf(doubles[1])); |
| | | // 起点地址转换 |
| | | doubles = GpsCoordinateUtils.calBD09toGCJ02(orderCrossCity.getStartLat(), orderCrossCity.getStartLon()); |
| | | orderServerWarpper.setStartLat(String.valueOf(doubles[0])); |
| | | orderServerWarpper.setStartLon(String.valueOf(doubles[1])); |
| | | // 终点地址转换 |
| | | doubles = GpsCoordinateUtils.calBD09toGCJ02(orderCrossCity.getEndLat(), orderCrossCity.getEndLon()); |
| | | orderServerWarpper.setEndLat(String.valueOf(doubles[0])); |
| | | orderServerWarpper.setEndLon(String.valueOf(doubles[1])); |
| | | orderServerWarpper.setReassignNotice(orderCrossCity.getReassignNotice()); |
| | | if(orderCrossCity.getState() == 2 || orderCrossCity.getState() == 3){//前往预约地 |
| | | orderServerWarpper.setReservationMileage(d); |
| | |
| | | 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)).setScale(2, BigDecimal.ROUND_HALF_EVEN).intValue() + ""; |
| | | d = new BigDecimal(distance.get("distance")).divide(new BigDecimal(1000),2, BigDecimal.ROUND_HALF_EVEN).toString(); |
| | | t = new BigDecimal(distance.get("duration")).divide(new BigDecimal(60),2, BigDecimal.ROUND_HALF_EVEN).intValue() + ""; |
| | | } |
| | | orderServerWarpper.setReservationMileage("0"); |
| | | orderServerWarpper.setReservationTime("0"); |
| | |
| | | return orderCrossCityMapper.queryListOrder(driverId, lineShiftId, state, day); |
| | | } |
| | | |
| | | @Override |
| | | public void autoCancelOrder() { |
| | | LocalDateTime localDateTime = LocalDateTime.now(); |
| | | LocalDateTime dateTime = localDateTime.minusMinutes(30); |
| | | String time = dateUtil.localDateTimeToStringHHmm(dateTime); |
| | | LocalDateTime start = LocalDateTime.parse(time + ":00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); |
| | | LocalDateTime end = start.plusMinutes(1); |
| | | |
| | | List<OrderCrossCity> orderCrossCities = this.selectList(new EntityWrapper<OrderCrossCity>().eq("state", 7).between("insertTime", start, end)); |
| | | if(!CollectionUtils.isEmpty(orderCrossCities)){ |
| | | for (OrderCrossCity orderCrossCity : orderCrossCities) { |
| | | orderCrossCity.setState(10); |
| | | } |
| | | this.updateBatchById(orderCrossCities); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 获取订单编号 |
| | | * @return |
| | |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 推送跨城抢单数据 |
| | | * @param orderCrossCity |
| | | * @throws Exception |
| | | */ |
| | | public void pushCrossCityOrder(OrderCrossCity orderCrossCity) throws Exception{ |
| | | new Thread(new Runnable() { |
| | | @Override |
| | | public void run() { |
| | | try { |
| | | crossCityOrderIds.add(orderCrossCity.getId());//添加记录,防止调用接口重复提醒无人接单 |
| | | String vehicle = redisUtil.getValue("VEHICLE"); |
| | | List<Integer> integers = new ArrayList<>(); |
| | | if(ToolUtil.isNotEmpty(vehicle)){ |
| | | integers = JSON.parseArray(vehicle).toJavaList(Integer.class); |
| | | } |
| | | Company query = companyCityService.query(String.valueOf(orderCrossCity.getStartLon()), String.valueOf(orderCrossCity.getStartLat()));//获取起点所属分公司 |
| | | // List<PushOrder> querys = pushOrderService.querys(null, 1, query.getId());//获取需要推送的次数 |
| | | // Company query = companyService.selectById(1); |
| | | for(int i = 1; i <= 3; i++){ |
| | | // PushOrder pushOrder = pushOrderService.querys(i, 4, query.getId()).get(0); |
| | | |
| | | //获取同线路的同车型的跨城司机 |
| | | List<Driver> list = driverService.queryDriversByLineAndCarModel(3,orderCrossCity.getServerCarModelId(), orderCrossCity.getLineId()); |
| | | 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(), orderCrossCity.getId(), 3, orderCrossCity.getState(), 10); |
| | | } |
| | | } |
| | | Thread.sleep(10 * 1000);//设置等待时间 |
| | | Integer state = orderCrossCityMapper.selectById(orderCrossCity.getId()).getState(); |
| | | if(state > 1){ |
| | | break; |
| | | } |
| | | // if(i == querys.size() && state == 1){ |
| | | if(i == 3 && state == 1){ |
| | | pushUtil.pushEndPush(1, orderCrossCity.getUserId(), orderCrossCity.getId(), 1); |
| | | orderIds.remove(orderCrossCity.getId()); |
| | | orderCrossCity.setState(10); |
| | | orderCrossCityMapper.updateById(orderCrossCity); |
| | | |
| | | OrderCancel orderCancel = new OrderCancel(); |
| | | orderCancel.setOrderId(orderCrossCity.getId()); |
| | | orderCancel.setOrderType(3); |
| | | orderCancel.setReason("没有司机接单,系统自动取消订单"); |
| | | orderCancel.setRemark("没有司机接单,系统自动取消订单"); |
| | | orderCancel.setState(2); |
| | | orderCancel.setInsertTime(new Date()); |
| | | orderCancel.setUserType(2); |
| | | orderCancelService.insert(orderCancel); |
| | | //TODO:退款 |
| | | UserInfo userInfo = userInfoService.selectById (orderCrossCity.getUserId()); |
| | | userInfo.setBalance (new BigDecimal (userInfo.getBalance ()) |
| | | .add (new BigDecimal (orderCrossCity.getOrderMoney())) // 余额增加订单金额 |
| | | .setScale (2, BigDecimal.ROUND_HALF_EVEN) |
| | | .doubleValue ()); |
| | | SysIntegral query1 = sysIntegralMapper.query (orderCrossCity.getCompanyId ()); |
| | | if (query1 != null) { |
| | | int addIntegral = orderCrossCity.getOrderMoney().intValue () * query1.getIntegral (); // 原增加的积分 |
| | | userInfo.setIntegral (userInfo.getIntegral () - addIntegral); // 扣除对应积分(确保积分不为负可加额外判断) |
| | | } |
| | | transactionDetailsService.saveData (orderCrossCity.getUserId(), "订单取消退款", orderCrossCity.getOrderMoney (), 1, 1, 1, 3, orderCrossCity.getId ()); |
| | | userInfoService.updateById (userInfo); |
| | | |
| | | } |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | }).start(); |
| | | } |
| | | |
| | | // /** |
| | | // * 下单后继续等待 |
| | | // * @param id |
| | | // * @return |
| | | // * @throws Exception |
| | | // */ |
| | | // @Override |
| | | // public ResultUtil pushOrderCrossCity(Integer id) throws Exception { |
| | | // OrderCrossCity orderCrossCity = this.selectById(id); |
| | | // if(null == orderCrossCity){ |
| | | // return ResultUtil.error("推送订单失败,订单信息有误"); |
| | | // } |
| | | // if(orderCrossCity.getState() != 1){ |
| | | // return ResultUtil.error("订单已被司机接单,不能重复推送"); |
| | | // } |
| | | // |
| | | // |
| | | // this.pushCrossCityOrder(orderCrossCity); |
| | | // |
| | | // return ResultUtil.success(); |
| | | // } |
| | | } |