| | |
| | | orderPrivateCar.setTotalPeopleNum(peopleNum); |
| | | orderPrivateCar.setIsReassign(1); |
| | | orderPrivateCar.setIsDelete(1); |
| | | orderPrivateCar.setPrepayStage(Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) ? 1 : 0); |
| | | this.insert(orderPrivateCar); |
| | | |
| | | if (orderSource == 2) {//扫码下单 |
| | |
| | | orderPrivateCar.setTotalPeopleNum(peopleNum); |
| | | orderPrivateCar.setIsReassign(1); |
| | | orderPrivateCar.setIsDelete(1); |
| | | orderPrivateCar.setPrepayStage(Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) ? 1 : 0); |
| | | this.insert(orderPrivateCar); |
| | | this.pushOrder(orderPrivateCar); |
| | | } else { |
| | |
| | | orderPrivateCar.setIsReassign(1); |
| | | orderPrivateCar.setIsDelete(1); |
| | | orderPrivateCar.setPid(orderPrivateCar1.getPid() == null ? orderPrivateCar1.getId() : orderPrivateCar1.getPid()); |
| | | orderPrivateCar.setPrepayStage(Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) ? 1 : 0); |
| | | this.insert(orderPrivateCar); |
| | | //修改总订单人数 |
| | | OrderPrivateCar orderPrivateCar2 = new OrderPrivateCar(); |
| | |
| | | orderPrivateCar.setTotalPeopleNum(peopleNum); |
| | | orderPrivateCar.setIsReassign(1); |
| | | orderPrivateCar.setIsDelete(1); |
| | | orderPrivateCar.setPrepayStage(Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) ? 1 : 0); |
| | | |
| | | //判断独享,一口价,拼车 |
| | | JSONArray jsonArray = JSON.parseArray(serverCarModel); |
| | |
| | | if (orderPrivateCar.getState() != 7) { |
| | | return ResultUtil.error("订单不在待支付状态,不允许支付", ""); |
| | | } |
| | | if (Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) && Integer.valueOf(4).equals(orderPrivateCar.getPrepayStage())) { |
| | | return ResultUtil.error("订单退款处理中,请等待退款完成", ""); |
| | | } |
| | | Integer uid = orderPrivateCar.getUserId(); |
| | | Double orderMoney = (2 == orderPrivateCar.getAbnormal() && 2 == orderPrivateCar.getAbnormalStatus() ? orderPrivateCar.getResponsibilityMoney().doubleValue() : orderPrivateCar.getOrderMoney()); |
| | | UserInfo userInfo = userInfoService.selectById(uid); |
| | |
| | | orderMoney = orderMoney < 0 ? 0 : orderMoney; |
| | | 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);//添加预支付数据 |
| | | String outTradeNo = orderId + "_1_" + UUIDUtil.getRandomCode(5); |
| | | resultUtil = payMoneyUtil.weixinpay("完成订单", "", outTradeNo, orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); |
| | | paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, outTradeNo, 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);//添加预支付数据 |
| | | String outTradeNo = orderId + "_1_" + UUIDUtil.getRandomCode(5); |
| | | resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", outTradeNo, orderMoney.toString(), "/base/aliPayOrderTaxi"); |
| | | paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, outTradeNo, 1);//添加预支付数据 |
| | | } |
| | | if (payType == 3) {//余额支付 |
| | | if (userInfo.getBalance() == null || userInfo.getBalance() < orderMoney) { |
| | |
| | | |
| | | userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | |
| | | boolean isPrepayFirstStage = isPrivateCarPrepayFirstStage(orderPrivateCar); |
| | | boolean isPrepaySpreadStage = isPrivateCarPrepaySpreadStage(orderPrivateCar); |
| | | if (isPrepayFirstStage) { |
| | | handlePrivateCarPrepayFirstPaid(orderPrivateCar, userInfo, orderMoney, 3); |
| | | return resultUtil; |
| | | } |
| | | |
| | | OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); |
| | | SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); |
| | | 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); |
| | | orderPrivateCar.setPayMoney(isPrepaySpreadStage ? appendPayMoney(orderPrivateCar.getPayMoney(), orderMoney) : orderMoney); |
| | | orderPrivateCar.setPayTime(new Date()); |
| | | |
| | | //处理优惠券和红包 |
| | | if (null != userCouponRecord) { |
| | | userCouponRecord.setState(2); |
| | | userCouponRecord.setEndTime(new Date()); |
| | | userCouponRecordService.updateById(userCouponRecord); |
| | | if (isPrepaySpreadStage) { |
| | | orderPrivateCar.setPrepayStage(5); |
| | | orderPrivateCar.setPrepaySecondPayNo(buildBalancePayNo(1, orderId)); |
| | | } |
| | | if (null != query) { |
| | | query.setState(2); |
| | | query.setEndTime(new Date()); |
| | | userRedPacketRecordService.updateById(query); |
| | | |
| | | if (!isPrepaySpreadStage) { |
| | | consumePrivateCarBenefits(orderPrivateCar); |
| | | } |
| | | //非追缴单才需要添加收入 |
| | | if(0 == orderPrivateCar.getRecoveryOrder()){ |
| | |
| | | } |
| | | if (orderPrivateCar.getState() != 7) { |
| | | return ResultUtil.error("订单不在待支付状态,不允许支付", new ArrayList<>()); |
| | | } |
| | | if (Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) && Integer.valueOf(4).equals(orderPrivateCar.getPrepayStage())) { |
| | | return ResultUtil.error("订单退款处理中,请等待退款完成", new ArrayList<>()); |
| | | } |
| | | |
| | | Integer uid = orderPrivateCar.getUserId(); |
| | |
| | | return ResultUtil.error("请使用余额支付"); |
| | | } |
| | | 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);//添加预支付数据 |
| | | String outTradeNo = orderId + "_1_" + UUIDUtil.getRandomCode(5); |
| | | resultUtil = payMoneyUtil.weixinpay("完成订单", "", outTradeNo, orderMoney.toString(), "/base/wxPayOrderTaxi", app, userInfo.getAppletsOpenId()); |
| | | paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 1, orderMoney, outTradeNo, 1);//添加预支付数据 |
| | | |
| | | //创建定时任务查询订单支付状态 |
| | | ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); |
| | |
| | | if (orderMoney == 0) { |
| | | return ResultUtil.error("请使用余额支付"); |
| | | } |
| | | resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_1_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi"); |
| | | paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, "", 1);//添加预支付数据 |
| | | String outTradeNo = orderId + "_1_" + UUIDUtil.getRandomCode(5); |
| | | resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", outTradeNo, orderMoney.toString(), "/base/aliPayOrderTaxi"); |
| | | paymentRecordService.saveData(1, orderPrivateCar.getUserId(), 1, orderId, 1, 2, orderMoney, outTradeNo, 1);//添加预支付数据 |
| | | } |
| | | if (payType == 3) {//余额支付 |
| | | if (userInfo.getBalance() == null || userInfo.getBalance() < orderMoney) { |
| | |
| | | } |
| | | |
| | | userInfo.setBalance(new BigDecimal(userInfo.getBalance()).subtract(new BigDecimal(orderMoney)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | |
| | | |
| | | boolean isPrepayFirstStage = isPrivateCarPrepayFirstStage(orderPrivateCar); |
| | | boolean isPrepaySpreadStage = isPrivateCarPrepaySpreadStage(orderPrivateCar); |
| | | if (isPrepayFirstStage) { |
| | | handlePrivateCarPrepayFirstPaid(orderPrivateCar, userInfo, orderMoney, 3); |
| | | return resultUtil; |
| | | } |
| | | |
| | | OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); |
| | | SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); |
| | | if (null != query1) { |
| | |
| | | |
| | | orderPrivateCar.setState(8); |
| | | orderPrivateCar.setPayType(3); |
| | | orderPrivateCar.setPayMoney(isPrepaySpreadStage ? appendPayMoney(orderPrivateCar.getPayMoney(), orderMoney) : orderMoney); |
| | | orderPrivateCar.setPayTime(new Date()); |
| | | |
| | | //处理优惠券和红包 |
| | | if (null != userCouponRecord) { |
| | | userCouponRecord.setState(2); |
| | | userCouponRecord.setEndTime(new Date()); |
| | | userCouponRecordService.updateById(userCouponRecord); |
| | | if (isPrepaySpreadStage) { |
| | | orderPrivateCar.setPrepayStage(5); |
| | | orderPrivateCar.setPrepaySecondPayNo(buildBalancePayNo(1, orderId)); |
| | | } |
| | | //处理打车卡 |
| | | if (null != userTaxiCard) { |
| | | userTaxiCardService.updateById(userTaxiCard); |
| | | } |
| | | if (null != query) { |
| | | query.setState(2); |
| | | query.setEndTime(new Date()); |
| | | userRedPacketRecordService.updateById(query); |
| | | |
| | | if (!isPrepaySpreadStage) { |
| | | consumePrivateCarBenefits(orderPrivateCar); |
| | | } |
| | | //非追缴单才添加收入记录 |
| | | if(0 == orderPrivateCar.getRecoveryOrder()){ |
| | |
| | | System.err.println("预支付数据异常(orderId = " + id + ")"); |
| | | } |
| | | } |
| | | |
| | | private boolean isPrivateCarPrepayFirstStage(OrderPrivateCar orderPrivateCar) { |
| | | return orderPrivateCar != null |
| | | && Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) |
| | | && Integer.valueOf(1).equals(orderPrivateCar.getPrepayStage()); |
| | | } |
| | | |
| | | private boolean isPrivateCarPrepaySpreadStage(OrderPrivateCar orderPrivateCar) { |
| | | return orderPrivateCar != null |
| | | && Integer.valueOf(1).equals(orderPrivateCar.getPaymentMode()) |
| | | && Integer.valueOf(3).equals(orderPrivateCar.getPrepayStage()); |
| | | } |
| | | |
| | | private String buildBalancePayNo(Integer orderType, Integer orderId) { |
| | | return "BAL_" + orderType + "_" + orderId + "_" + System.currentTimeMillis(); |
| | | } |
| | | |
| | | private Double appendPayMoney(Double source, Double amount) { |
| | | return new BigDecimal(source == null ? 0D : source) |
| | | .add(new BigDecimal(amount == null ? 0D : amount)) |
| | | .setScale(2, BigDecimal.ROUND_HALF_EVEN) |
| | | .doubleValue(); |
| | | } |
| | | |
| | | private void consumePrivateCarBenefits(OrderPrivateCar orderPrivateCar) throws Exception { |
| | | if (null != orderPrivateCar.getCouponId()) { |
| | | UserCouponRecord userCouponRecord = userCouponRecordService.selectById(orderPrivateCar.getCouponId()); |
| | | if (userCouponRecord != null) { |
| | | userCouponRecord.setState(2); |
| | | userCouponRecord.setEndTime(new Date()); |
| | | userCouponRecordService.updateById(userCouponRecord); |
| | | } |
| | | } |
| | | if (null != orderPrivateCar.getUserTaxiCardId()) { |
| | | UserTaxiCard userTaxiCard = userTaxiCardService.selectById(orderPrivateCar.getUserTaxiCardId()); |
| | | if (userTaxiCard != null && (userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3)) { |
| | | JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent()); |
| | | jsonObject.put("time", jsonObject.getInteger("time") - 1); |
| | | userTaxiCard.setContent(jsonObject.toJSONString()); |
| | | userTaxiCardService.updateById(userTaxiCard); |
| | | } |
| | | } |
| | | if (null != orderPrivateCar.getRedPacketId()) { |
| | | UserRedPacketRecord userRedPacketRecord = userRedPacketRecordService.selectById(orderPrivateCar.getRedPacketId()); |
| | | if (userRedPacketRecord != null) { |
| | | userRedPacketRecord.setState(2); |
| | | userRedPacketRecord.setEndTime(new Date()); |
| | | userRedPacketRecordService.updateById(userRedPacketRecord); |
| | | } |
| | | } |
| | | } |
| | | |
| | | private void dispatchPrepayPrivateCarOrder(OrderPrivateCar orderPrivateCar) throws Exception { |
| | | if (Integer.valueOf(3).equals(orderPrivateCar.getType()) && ToolUtil.isNotEmpty(orderPrivateCar.getServerCarModel())) { |
| | | JSONArray jsonArray = JSON.parseArray(orderPrivateCar.getServerCarModel()); |
| | | for (int i = 0; i < jsonArray.size(); i++) { |
| | | JSONObject jsonObject = jsonArray.getJSONObject(i); |
| | | Integer serverCarModelId = jsonObject.getInteger("serverCarModelId"); |
| | | Integer rideType = jsonObject.getInteger("rideType"); |
| | | if (serverCarModelId != null && serverCarModelId == 0) { |
| | | OrderTaxi orderTaxi = new OrderTaxi(); |
| | | orderTaxi.setId(orderPrivateCar.getId()); |
| | | orderTaxi.setState(1); |
| | | orderTaxi.setUserId(orderPrivateCar.getUserId()); |
| | | orderTaxi.setStartLon(orderPrivateCar.getStartLon()); |
| | | orderTaxi.setStartLat(orderPrivateCar.getStartLat()); |
| | | orderTaxiService.pushOrder(orderTaxi, 3); |
| | | continue; |
| | | } |
| | | OrderPrivateCar pushOrder = new OrderPrivateCar(); |
| | | BeanUtils.copyProperties(orderPrivateCar, pushOrder); |
| | | pushOrder.setRideType(rideType); |
| | | pushOrder.setServerCarModelId(serverCarModelId); |
| | | this.pushOrder(pushOrder); |
| | | } |
| | | return; |
| | | } |
| | | if (Integer.valueOf(3).equals(orderPrivateCar.getRideType())) { |
| | | this.pushOrderPrivateCar(orderPrivateCar.getId()); |
| | | return; |
| | | } |
| | | this.pushOrder(orderPrivateCar); |
| | | } |
| | | |
| | | private void handlePrivateCarPrepayFirstPaid(OrderPrivateCar orderPrivateCar, UserInfo userInfo, Double payAmount, Integer payType) throws Exception { |
| | | OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); |
| | | SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); |
| | | if (null != query1) { |
| | | userInfo.setIntegral(userInfo.getIntegral() + (payAmount.intValue() * query1.getIntegral())); |
| | | } |
| | | userInfoService.updateById(userInfo); |
| | | |
| | | consumePrivateCarBenefits(orderPrivateCar); |
| | | transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车订单", payAmount, 2, 1, 1, 1, orderPrivateCar.getId()); |
| | | |
| | | orderPrivateCar.setState(1); |
| | | orderPrivateCar.setPayType(payType); |
| | | orderPrivateCar.setPayMoney(payAmount); |
| | | orderPrivateCar.setPayTime(new Date()); |
| | | orderPrivateCar.setPrepayStage(2); |
| | | this.updateAllColumnById(orderPrivateCar); |
| | | |
| | | pushUtil.pushOrderState(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); |
| | | systemNoticeService.addSystemNotice(1, "您的快车订单已支付成功,我们正在为您指派司机,请稍后!", orderPrivateCar.getUserId(), 1); |
| | | dispatchPrepayPrivateCarOrder(orderPrivateCar); |
| | | } |
| | | |
| | | @Override |
| | | public void payOrderPrivateCarCallback(Integer id, String order_id, Integer type) throws Exception { |
| | | public void payOrderPrivateCarCallback(Integer id, String order_id, Integer type, String outTradeNo) throws Exception { |
| | | OrderPrivateCar orderPrivateCar = this.selectById(id); |
| | | PaymentRecord query = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, Integer.valueOf(id), 1, type, 1); |
| | | PaymentRecord query = ToolUtil.isNotEmpty(outTradeNo) ? paymentRecordService.queryByCode(outTradeNo, 1) : null; |
| | | if (query == null) { |
| | | query = paymentRecordService.query(1, orderPrivateCar.getUserId(), 1, Integer.valueOf(id), 1, type, 1); |
| | | } |
| | | if (null != query && query.getState() == 1) { |
| | | UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId()); |
| | | query.setState(2); |
| | | query.setCode(order_id); |
| | | paymentRecordService.updateById(query); |
| | | |
| | | if (isPrivateCarPrepayFirstStage(orderPrivateCar)) { |
| | | handlePrivateCarPrepayFirstPaid(orderPrivateCar, userInfo, query.getAmount(), type); |
| | | return; |
| | | } |
| | | |
| | | //添加交易明细 |
| | | transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车订单", query.getAmount(), 2, 1, 1, 1, query.getOrderId()); |
| | | orderPrivateCar.setState(8); |
| | | orderPrivateCar.setPayType(type); |
| | | orderPrivateCar.setPayMoney(query.getAmount()); |
| | | boolean isPrepaySpreadStage = isPrivateCarPrepaySpreadStage(orderPrivateCar); |
| | | orderPrivateCar.setPayMoney(isPrepaySpreadStage ? appendPayMoney(orderPrivateCar.getPayMoney(), query.getAmount()) : query.getAmount()); |
| | | orderPrivateCar.setPayTime(new Date()); |
| | | |
| | | UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId()); |
| | | if (isPrepaySpreadStage) { |
| | | orderPrivateCar.setPrepayStage(5); |
| | | orderPrivateCar.setPrepaySecondPayNo(order_id); |
| | | } |
| | | |
| | | OpenCity openCity = openCityService.openCity1(orderPrivateCar.getStartLon().toString(), orderPrivateCar.getStartLat().toString()); |
| | | SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); |
| | | if(null != query1){ |
| | | 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 (!isPrepaySpreadStage) { |
| | | consumePrivateCarBenefits(orderPrivateCar); |
| | | } |
| | | if (null != orderPrivateCar.getUserTaxiCardId()) { |
| | | UserTaxiCard userTaxiCard = userTaxiCardService.selectById(orderPrivateCar.getUserTaxiCardId()); |
| | | if (userTaxiCard.getType() == 1 || userTaxiCard.getType() == 3) { |
| | | JSONObject jsonObject = JSON.parseObject(userTaxiCard.getContent()); |
| | | jsonObject.put("time", jsonObject.getInteger("time") - 1); |
| | | userTaxiCard.setContent(jsonObject.toJSONString()); |
| | | userTaxiCardService.updateById(userTaxiCard); |
| | | } |
| | | } |
| | | 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); |
| | | |
| | | //非追缴单才需要记录收入 |
| | | if(null != orderPrivateCar.getRecoveryOrder() && 0 == orderPrivateCar.getRecoveryOrder()){ |