| | |
| | | if (lineShiftDriver == null) { |
| | | return ResultUtil.error("班次信息不存在"); |
| | | } |
| | | if (lineShiftDriver.getLineShiftId() != null && lineShiftDriver.getLineShiftId() == -1) { |
| | | if (lineShiftDriver.getLineShiftId() != null && lineShiftDriver.getLineShiftId() <= -1) { |
| | | return buildSelfTripDetail(lineShiftDriver); |
| | | } |
| | | |
| | |
| | | serverMoney += income.getMoney(); |
| | | } |
| | | } |
| | | if (orderCrossCity.getLineId() == -1) { |
| | | if (orderCrossCity.getLineId() <= -1) { |
| | | LineShiftDriver lineShiftDriver = lineShiftDriverMapper.selectById(orderCrossCity.getLineShiftDriverId()); |
| | | DriverSelfTrip driverSelfTrip = driverSelfTripMapper.selectById(lineShiftDriver.getCustomerId()); |
| | | map.put("line", driverSelfTrip.getStartCityName() + "-" + driverSelfTrip.getEndCityName()); |
| | | map.put("lineId", -1); |
| | | map.put("lineId", orderCrossCity.getLineId()); |
| | | } else { |
| | | Line line = lineService.selectById(orderCrossCity.getLineId()); |
| | | map.put("line", line.getName()); |
| | |
| | | map.put("price", -1); |
| | | return ResultUtil.success(map); |
| | | } |
| | | if (lineId != null && lineId == -1) { |
| | | if (lineId != null && lineId <= -1) { |
| | | BigDecimal price = querySelfTripNearestPrice(lineShiftDriver, endLon, endLat); |
| | | map.put("price", price == null ? -1 : multiplyPeopleNumber(price, peopleNumber).doubleValue()); |
| | | return ResultUtil.success(map); |
| | |
| | | map.put("price", unitPrice == null ? -1 : multiplyPeopleNumber(unitPrice, peopleNumber).doubleValue()); |
| | | return ResultUtil.success(map); |
| | | } |
| | | if (lineId != null && lineId == -1) { |
| | | if (lineId != null && lineId <= -1) { |
| | | if (lineShiftDriverId == null) { |
| | | map.put("price", -1); |
| | | return ResultUtil.success(map); |
| | |
| | | |
| | | // 6. 获取线路班次信息 |
| | | LineSite lineSite; |
| | | if (lineShiftDriver.getLineShiftId() == -1) { |
| | | if (lineShiftDriver.getLineShiftId() <= -1) { |
| | | lineSite = new LineSite(); |
| | | lineSite.setLineId(-1); |
| | | if (lineShiftDriver.getCustomerId() != null) { |
| | |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.util.*; |
| | | |
| | | |
| | |
| | | return ResultUtil.error("当前订单不能操作"); |
| | | } |
| | | } |
| | | Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); |
| | | switch (state){ |
| | | case 3://出发前往预约点 |
| | | orderPrivateCar.setState(3); |
| | | orderPrivateCar.setSetOutTime(new Date()); |
| | | if (driver.getState() != 3) { |
| | | driver.setState(3); |
| | | driverService.updateById(driver); |
| | | } |
| | | systemNoticeService.addSystemNotice(1, "司机已出发,请耐心等待", orderPrivateCar.getUserId(), 1); |
| | | break; |
| | | case 4://到达预约点,等待客户上车 |
| | |
| | | orderPrivateCar.setGetoffAddress(address); |
| | | orderPrivateCar.setGetoffTime(new Date()); |
| | | orderPrivateCar.setEndServiceTime(new Date()); |
| | | if (driver.getState() != 2) { |
| | | driver.setState(2); |
| | | driverService.updateById(driver); |
| | | } |
| | | break; |
| | | } |
| | | orderPrivateCar.setCancelType(2); |
| | |
| | | |
| | | Map<String, Object> map = new HashMap<>(); |
| | | if(orderPrivateCar.getState() == 5){ |
| | | map.put("orderMoney", orderPrivateCar.getOrderMoney()==null?0:orderPrivateCar.getOrderMoney());//订单金额 |
| | | map.put("orderMoney", orderPrivateCar.getOrderMoney()==null?BigDecimal.ZERO:new BigDecimal(orderPrivateCar.getOrderMoney().toString()).setScale(2,RoundingMode.HALF_UP));//订单金额 |
| | | }else{ |
| | | if(orderPrivateCar.getAbnormal() == 2 && orderPrivateCar.getResponsibilityType() > 2 && orderPrivateCar.getAbnormalStatus() == 2){ |
| | | map.put("orderMoney", orderPrivateCar.getResponsibilityMoney()); |
| | | }else{ |
| | | map.put("orderMoney", orderPrivateCar.getOrderMoney()==null?0:orderPrivateCar.getOrderMoney());//订单金额 |
| | | map.put("orderMoney", orderPrivateCar.getOrderMoney()==null?BigDecimal.ZERO:new BigDecimal(orderPrivateCar.getOrderMoney().toString()).setScale(2,RoundingMode.HALF_UP));//订单金额 |
| | | } |
| | | } |
| | | map.put("startMileage", orderPrivateCar.getStartMileage());//起步价 |
| | |
| | | @TableField("Taxi") |
| | | private String Taxi; |
| | | /** |
| | | * 跨城出行自主单抽成配置 |
| | | */ |
| | | @TableField("cross") |
| | | private String cross; |
| | | /** |
| | | * 同城小件抽成配置 |
| | | */ |
| | | @TableField("SameLogistics") |
| | |
| | | public void setEnterCode(String enterCode) { |
| | | this.enterCode = enterCode; |
| | | } |
| | | |
| | | |
| | | public String getCross() { |
| | | return cross; |
| | | } |
| | | |
| | | public void setCross(String cross) { |
| | | this.cross = cross; |
| | | } |
| | | |
| | | @Override |
| | | public String toString() { |
| | | return "Company{" + |
| | |
| | | break; |
| | | case 3: |
| | | OrderCrossCity orderCrossCity = orderCrossCityService.selectById(orderId); |
| | | if (orderCrossCity.getLineId() == -1){ |
| | | driverId = orderCrossCity.getDriverId(); |
| | | if (orderCrossCity.getLineId() <= -1){ |
| | | company = companyService.selectById(orderCrossCity.getCompanyId()); |
| | | jsonObject = JSON.parseObject(company.getTaxi()); |
| | | jsonObject = JSON.parseObject(company.getCross()); |
| | | }else { |
| | | Line line = lineService.selectById(orderCrossCity.getLineId()); |
| | | driverId = orderCrossCity.getDriverId(); |
| | | jsonObject = JSON.parseObject(line.getOutSetting()); |
| | | } |
| | | rules = jsonObject.getJSONArray("rules"); |
| | |
| | | } |
| | | |
| | | public String getUnlimitQrcode(String appletPath, String scene){ |
| | | InputStream inputStream = getwxacodeunlimit(appletPath, scene, activeProfile.equals("prod") ? "release" : "trial"); |
| | | // InputStream inputStream = getwxacodeunlimit(appletPath, scene, activeProfile.equals("prod") ? "release" : "trial"); |
| | | InputStream inputStream = getwxacodeunlimit(appletPath, scene, "trial"); |
| | | if (inputStream != null) { |
| | | File file = FileUtil.writeFromStream(inputStream, new File(filePath + "/" + UUID.randomUUID().toString() + ".png")); |
| | | HttpRequest post = HttpUtil.createPost(adminUrl + "/upload/image"); |
| | |
| | | @ApiModel("费用明细") |
| | | public class MoneyInfoWarpper { |
| | | @ApiModelProperty("订单总金额") |
| | | private Double orderMoney; |
| | | private String orderMoney; |
| | | @ApiModelProperty("起步里程") |
| | | private Double startMileage; |
| | | @ApiModelProperty("起步价") |
| | |
| | | @ApiModelProperty("折扣") |
| | | private Double discount; |
| | | |
| | | public Double getOrderMoney() { |
| | | public String getOrderMoney() { |
| | | return orderMoney; |
| | | } |
| | | |
| | | public void setOrderMoney(Double orderMoney) { |
| | | public void setOrderMoney(String orderMoney) { |
| | | this.orderMoney = orderMoney; |
| | | } |
| | | |
| | |
| | | public static MoneyInfoWarpper getMoneyInfoWarpper(Map<String, Object> map){ |
| | | MoneyInfoWarpper moneyInfoWarpper = new MoneyInfoWarpper(); |
| | | if(null != map){ |
| | | moneyInfoWarpper.setOrderMoney(null != map.get("orderMoney") ? Double.valueOf(map.get("orderMoney").toString()) : 0D); |
| | | moneyInfoWarpper.setOrderMoney(null != map.get("orderMoney") ? map.get("orderMoney").toString() : "0"); |
| | | moneyInfoWarpper.setStartMileage(null != map.get("startMileage") ? Double.valueOf(map.get("startMileage").toString()) : 0D); |
| | | moneyInfoWarpper.setStartMoney(null != map.get("startMoney") ? Double.valueOf(map.get("startMoney").toString()) : 0D); |
| | | moneyInfoWarpper.setMileage(null != map.get("mileageKilometers") ? Double.valueOf(map.get("mileageKilometers").toString()) : 0D); |
| | |
| | | orderListWarpper.setId(null != map.get("id") ? Integer.valueOf(String.valueOf(map.get("id"))) : 0); |
| | | orderListWarpper.setRideType(null != map.get("rideType") ? Integer.valueOf(String.valueOf(map.get("rideType"))) : 1); |
| | | orderListWarpper.setSpellSuccess(null != map.get("spellSuccess") ? Integer.valueOf(String.valueOf(map.get("spellSuccess"))) : 0); |
| | | orderListWarpper.setName(null != map.get("name") ? String.valueOf(map.get("name")) : ""); |
| | | if (map.get("reservation") != null) { |
| | | if (Integer.parseInt(map.get("reservation").toString()) == 1) { |
| | | orderListWarpper.setName(null != map.get("name") ? String.valueOf(map.get("name")).replace("订单", "") + "即时订单" : ""); |
| | | } else if (Integer.parseInt(map.get("reservation").toString()) == 2) { |
| | | orderListWarpper.setName(null != map.get("name") ? String.valueOf(map.get("name")).replace("订单", "") + "预约订单" : ""); |
| | | } else { |
| | | orderListWarpper.setName(null != map.get("name") ? String.valueOf(map.get("name")) : ""); |
| | | } |
| | | } else { |
| | | orderListWarpper.setName(null != map.get("name") ? String.valueOf(map.get("name")) : ""); |
| | | } |
| | | orderListWarpper.setTime(null != map.get("time") ? String.valueOf(map.get("time")) : ""); |
| | | orderListWarpper.setStartAddress(null != map.get("startAddress") ? String.valueOf(map.get("startAddress")) : ""); |
| | | orderListWarpper.setEndAddress(null != map.get("endAddress") ? String.valueOf(map.get("endAddress")) : ""); |
| | |
| | | if(10 == orderTaxi.getState()){ |
| | | return ResultUtil.error("订单已被取消,不能继续操作"); |
| | | } |
| | | Driver driver = driverService.selectById(orderTaxi.getDriverId()); |
| | | switch (state){ |
| | | case 3://出发前往预约点 |
| | | orderTaxi.setState(3); |
| | | orderTaxi.setSetOutTime(new Date()); |
| | | if (driver.getState() != 3) { |
| | | driver.setState(3); |
| | | driverService.updateById(driver); |
| | | } |
| | | systemNoticeService.addSystemNotice(1, "司机已出发,请耐心等待", orderTaxi.getUserId(), 1); |
| | | break; |
| | | case 4://到达预约点,等待客户上车 |
| | |
| | | orderTaxi.setGetoffTime(new Date()); |
| | | orderTaxi.setState(6); |
| | | orderTaxi.setEndServiceTime(new Date()); |
| | | |
| | | if (driver.getState() != 2) { |
| | | driver.setState(2); |
| | | driverService.updateById(driver); |
| | | } |
| | | pushUtil.removeTask(orderId, 2);//删除定时任务,结束推送数据 |
| | | systemNoticeService.addSystemNotice(1, "司机已结束本次行程,谢谢使用", orderTaxi.getUserId(), 1); |
| | | break; |
| | |
| | | </div> |
| | | <div style="float: left;width: 1200px;margin-left: 50px;"> |
| | | <div class="pushOrderSettings"> |
| | | <div class="form-group pushCarSettings"> |
| | | <div class="form-group"> |
| | | <label class="col-sm-2 control-label">推单设置:</label> |
| | | <div class="col-sm-10"> |
| | | <div class="radio radio-danger"> |
| | |
| | | <br/> |
| | | </div> |
| | | </div> |
| | | <div class="form-group"> |
| | | <div class="form-group pushCarSettings"> |
| | | <label class="col-sm-2 control-label">出租车推单:</label> |
| | | <div class="col-sm-10"> |
| | | 第一轮推单:推单距离为 <input type="text" oninput="checkIsDouble(this)" |
| | |
| | | var czc7 = null == $("#czc7").val() ? "0" : $("#czc7").val().trim(); |
| | | var czc8 = null == $("#czc8").val() ? "0" : $("#czc8").val().trim(); |
| | | var czc9 = null == $("#czc9").val() ? "0" : $("#czc9").val().trim(); |
| | | var ajax = new $ax(Feng.ctxPath + "/tSysReformist/setUp", function(data){ |
| | | Feng.success("操作成功!"); |
| | | location.reload(); |
| | | },function(data){ |
| | | Feng.error("操作失败!" + data.responseJSON.message + "!"); |
| | | }); |
| | | if(type == 'pushOrderSettings'){ |
| | | if (pushType == 2) { |
| | | ajax.set("pushType", pushType); |
| | |
| | | if (dck2){dck2 = 1;} else {dck2 = 2;} |
| | | |
| | | var driverDays=$("#driverDay").val() |
| | | |
| | | //提交信息 |
| | | var ajax = new $ax(Feng.ctxPath + "/tSysReformist/setUp", function(data){ |
| | | Feng.success("操作成功!"); |
| | | location.reload(); |
| | | },function(data){ |
| | | Feng.error("操作失败!" + data.responseJSON.message + "!"); |
| | | }); |
| | | |
| | | if(type == 'integralSet'){ |
| | | ajax.set("two", two); |
| | |
| | | } |
| | | |
| | | Integer lineShifDriverId = null; |
| | | if (lineId < 0 && lineDestinationId < 0) { |
| | | if (lineId < 0 && (lineDestinationId == null || lineDestinationId < 0)) { |
| | | lineShifDriverId = lineShiftDriverMapper.selectLineShiftDriverIdByCustomerId(-lineId); |
| | | } |
| | | ResultUtil<Map<String, Object>> result = this.getPriceV2(lineId, lineDestinationId, totalSeat, peopleNumber, endLon, endLat, lineShifDriverId); |
| | |
| | | } |
| | | String paymentCode = ToolUtil.isNotEmpty(cbyzxOrderPayHelper.extractRecordCode(response)) ? cbyzxOrderPayHelper.extractRecordCode(response) : outTradeNo; |
| | | resultUtil = ResultUtil.success(response); |
| | | paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, orderMoney, paymentCode, 1);//添加预支付数据 |
| | | paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, orderMoney, outTradeNo, 1);//添加预支付数据 |
| | | } |
| | | if (payType == 2) {//支付宝支付 |
| | | resultUtil = payMoneyUtil.alipay("完成订单", "完成订单", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), orderMoney.toString(), "/base/aliPayOrderTaxi"); |
| | |
| | | String paymentCode = ToolUtil.isNotEmpty(cbyzxOrderPayHelper.extractRecordCode(response)) ? cbyzxOrderPayHelper.extractRecordCode(response) : outTradeNo; |
| | | resultUtil = ResultUtil.success(response); |
| | | this.updateById(orderCrossCity); |
| | | paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, orderMoney, paymentCode, 1);//添加预支付数据 |
| | | paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, orderId, 3, 1, orderMoney, outTradeNo, 1);//添加预支付数据 |
| | | } |
| | | if (payType == 2) {//支付宝支付 |
| | | if (orderMoney == 0) { |
| | |
| | | |
| | | |
| | | query.setState(2); |
| | | query.setCode(order_id); |
| | | // query.setCode(order_id); |
| | | paymentRecordService.updateById(query); |
| | | |
| | | // TODO: 2020/5/24 这里需要给司机和用户推送订单状态 |
| | |
| | | orderCrossCity.setMileage(0D); |
| | | |
| | | Integer lineShifDriverId = orderCrossCityWarpper.getLineShiftDriverId(); |
| | | if (orderCrossCityWarpper.getLineId() < 0 && orderCrossCityWarpper.getLineDestinationId() < 0) { |
| | | Integer lineDestinationId = orderCrossCityWarpper.getLineDestinationId(); |
| | | if (orderCrossCityWarpper.getLineId() < 0 && (lineDestinationId == null || lineDestinationId < 0)) { |
| | | lineShifDriverId = lineShiftDriverMapper.selectLineShiftDriverIdByCustomerId(-orderCrossCityWarpper.getLineId()); |
| | | } |
| | | ResultUtil<Map<String, Object>> price = this.getPriceV2(orderCrossCityWarpper.getLineId(), orderCrossCityWarpper.getLineDestinationId(), |
| | |
| | | if (money < 0) { |
| | | return ResultUtil.error("计算价格失败"); |
| | | } |
| | | orderCrossCity.setLineShiftDriverId(lineShifDriverId); |
| | | orderCrossCity.setOrderMoney(money); |
| | | Integer companyId = driver.getCompanyId(); |
| | | orderCrossCity.setCompanyId(companyId); |
| | |
| | | } |
| | | String recordCode = cbyzxOrderPayHelper.extractRecordCode(response); |
| | | String paymentCode = ToolUtil.isNotEmpty(recordCode) ? recordCode : outTradeNo; |
| | | paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, id, 3, 1, query.getMoney(), paymentCode, 1);//添加预支付数据 |
| | | paymentRecordService.saveData(1, orderCrossCity.getUserId(), 1, id, 3, 1, query.getMoney(), outTradeNo, 1);//添加预支付数据 |
| | | resultUtil = ResultUtil.success(response); |
| | | |
| | | // Map<String, String> map = icbcPayUtil.placeAnOrder(id + ",3", 9, 5, uid.toString(), "订单取消", query.getMoney(), callbackPath + "/base/wxCancelOrderTaxi", "", type, appletsOpenId); |
| | | // if(map.get("code").equals("200")){ |
| | |
| | | this.updateById(orderCrossCity); |
| | | |
| | | query.setState(2); |
| | | query.setCode(order_id); |
| | | // query.setCode(order_id); |
| | | paymentRecordService.updateById(query); |
| | | |
| | | OrderCancel query1 = orderCancelService.query(query.getOrderId(), query.getOrderType(), query.getAmount(), query.getPayType(), 1); |
| | |
| | | } |
| | | |
| | | if (query.getPayType() == 1) {//微信 |
| | | Map<String, String> map = payMoneyUtil.wxRefund(query.getCode(), id + "_3", query.getAmount().toString(), query.getAmount().toString(), "/base/cancleOrderWXPay"); |
| | | if (!"SUCCESS".equals(map.get("return_code"))) { |
| | | return ResultUtil.error(map.get("return_msg")); |
| | | CbyzxPayUtil.ClosePayOrderRequest request = new CbyzxPayUtil.ClosePayOrderRequest(); |
| | | request.setOutRequestNo(query.getCode()); |
| | | request.setRefundOutRequestNo(buildPrepayRefundOutNo(orderCrossCity.getId())); |
| | | |
| | | request.setRefundAmount(toFen(query.getAmount())); |
| | | request.setRefundDesc("跨城出行取消退款"); |
| | | JSONObject response = CbyzxPayUtil.closePayOrder(request); |
| | | System.out.println("跨城出行取消退款退款结果:" + response.toJSONString()); |
| | | if (!isTaxiPrepayRefundSuccess(response)) { |
| | | return ResultUtil.error(extractCrossCityRefundMessage(response), response); |
| | | } |
| | | transactionDetailsService.saveData(orderCrossCity.getUserId(), "跨城出行取消退款", query.getAmount(), 1, 1, 1, 3, id); |
| | | } else if (query.getPayType() == 4) { // 云闪付 |
| | |
| | | map.put("id", integer); |
| | | return ResultUtil.success(map); |
| | | } |
| | | |
| | | |
| | | |
| | | private Integer toFen(Double amount) { |
| | | return new BigDecimal(String.valueOf(amount)).multiply(new BigDecimal("100")).setScale(0, RoundingMode.HALF_UP).intValue(); |
| | | } |
| | | |
| | | private String buildPrepayRefundOutNo(Integer orderId) { |
| | | return "CROSS_REFUND_1_" + orderId + ToolUtil.getRandomString(5); |
| | | } |
| | | |
| | | private boolean isTaxiPrepayRefundSuccess(JSONObject response) { |
| | | if (response == null) { |
| | | return false; |
| | | } |
| | | Object code = response.get("code"); |
| | | if (code == null || !"0".equals(String.valueOf(code))) { |
| | | return false; |
| | | } |
| | | JSONObject data = response.getJSONObject("data"); |
| | | return data != null && Boolean.TRUE.equals(data.getBoolean("isSuccess")); |
| | | } |
| | | |
| | | private String extractCrossCityRefundMessage(JSONObject response) { |
| | | if (response == null) { |
| | | return "微信跨城订单退款失败"; |
| | | } |
| | | JSONObject data = response.getJSONObject("data"); |
| | | if (data != null && ToolUtil.isNotEmpty(data.getString("failReason"))) { |
| | | return data.getString("failReason"); |
| | | } |
| | | String msg = response.getString("msg"); |
| | | return ToolUtil.isNotEmpty(msg) ? msg : "微信跨城订单退款失败"; |
| | | } |
| | | /** |
| | | * 获取服务中的订单数据 |
| | | * |
| | |
| | | } |
| | | String recordCode = cbyzxOrderPayHelper.extractRecordCode(response); |
| | | String paymentCode = ToolUtil.isNotEmpty(recordCode) ? recordCode : outTradeNo; |
| | | paymentRecordService.saveData(3, uid, 1, orderId, 3, 1, money, paymentCode, 1);//添加预支付数据 |
| | | paymentRecordService.saveData(3, uid, 1, orderId, 3, 1, money, outTradeNo, 1);//添加预支付数据 |
| | | } |
| | | if (payType == 2) {//支付宝支付 |
| | | resultUtil = payMoneyUtil.alipay("感谢费", "感谢费", "", orderId + "_3_" + UUIDUtil.getRandomCode(5), money.toString(), "/base/aliPayThankYouFee"); |
| | |
| | | UserInfo userInfo = userInfoService.selectById(orderCrossCity.getUserId()); |
| | | PaymentRecord query = paymentRecordService.query(3, userInfo.getId(), 1, orderId, 3, payType, 1); |
| | | query.setState(2); |
| | | query.setCode(order_id); |
| | | // query.setCode(order_id); |
| | | paymentRecordService.updateById(query); |
| | | |
| | | OpenCity openCity = openCityService.openCity1(orderCrossCity.getStartLon().toString(), orderCrossCity.getStartLat().toString()); |
| | |
| | | left join t_order_evaluate g on (a.id = g.orderId and g.orderType = 1) |
| | | left join t_order_cancel h on (a.id = h.orderId and h.orderType = 1 and h.state = 2) |
| | | where a.id = #{orderId} |
| | | LIMIT 1 |
| | | </select> |
| | | |
| | | |
| | |
| | | // return ResultUtil.success(map); |
| | | } |
| | | }else if(!Integer.valueOf(2).equals(orderPrivateCar.getPaymentMode()) && StrUtil.isEmpty(orderPrivateCar.getPrepaySecondPayNo())){ |
| | | UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId()); |
| | | userInfo.setBalance(userInfo.getBalance() + orderPrivateCar.getPayMoney()); |
| | | userInfoService.updateById(userInfo); |
| | | |
| | | if (orderPrivateCar.getPayMoney() != null){ |
| | | UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId()); |
| | | userInfo.setBalance(userInfo.getBalance() + orderPrivateCar.getPayMoney()); |
| | | userInfoService.updateById(userInfo); |
| | | } |
| | | } |
| | | Integer number1 = this.selectCount(new EntityWrapper<OrderPrivateCar>().eq("pid", orderPrivateCar.getPid() == null ? orderPrivateCar.getId() : orderPrivateCar.getPid()).lt("state", 6)); |
| | | Integer number2 = this.selectCount(new EntityWrapper<OrderPrivateCar>().eq("id", orderPrivateCar.getPid() == null ? orderPrivateCar.getId() : orderPrivateCar.getPid()).lt("state", 6)); |
| | |
| | | } |
| | | |
| | | private ResultUtil handlePrivateCarPrepayCancelRefund(OrderPrivateCar orderPrivateCar, String reason, String remark, Integer uid) throws Exception { |
| | | System.out.println("快车退款!!!!"); |
| | | if (!isPrivateCarPrepayMode(orderPrivateCar)) { |
| | | return null; |
| | | } |
| | | if (Integer.valueOf(3).equals(orderPrivateCar.getPayType())) { |
| | | Double refundAmount = orderPrivateCar.getPayMoney(); |
| | | System.out.println("快车余额退款金额!!!!"+ refundAmount); |
| | | if (refundAmount == null || refundAmount <= 0) { |
| | | return ResultUtil.error("余额先付订单退款金额异常"); |
| | | } |
| | | UserInfo userInfo = userInfoService.selectById(orderPrivateCar.getUserId()); |
| | | if (userInfo == null) { |
| | | return ResultUtil.error("用户信息不存在,无法退款"); |
| | | } |
| | | userInfo.setBalance(new BigDecimal(null != userInfo.getBalance() ? userInfo.getBalance() : 0) |
| | | .add(new BigDecimal(refundAmount)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | userInfoService.updateById(userInfo); |
| | | restorePrivateCarBenefits(orderPrivateCar); |
| | | transactionDetailsService.saveData(orderPrivateCar.getUserId(), "快车取消订单退款", refundAmount, 1, 1, 1, 1, orderPrivateCar.getId()); |
| | | orderCancelService.saveData(orderPrivateCar.getId(), 1, |
| | | ToolUtil.isNotEmpty(reason) ? reason : "无司机接单", |
| | | ToolUtil.isNotEmpty(remark) ? remark : (ToolUtil.isNotEmpty(reason) ? reason : "无司机接单"), |
| | | 1, refundAmount, 2, 1, uid); |
| | | orderPrivateCar.setState(10); |
| | | orderPrivateCar.setPrepayStage(5); |
| | | orderPrivateCar.setPrepayRefundNo("BALANCE_REFUND_1_" + orderPrivateCar.getId() + "_" + ToolUtil.getRandomString(5)); |
| | | orderPrivateCar.setPrepayRefundAmount(refundAmount); |
| | | orderPrivateCar.setPrepayRefundTime(new Date()); |
| | | this.updateById(orderPrivateCar); |
| | | if (orderPrivateCar.getDriverId() != null) { |
| | | this.deleteTask(orderPrivateCar.getId()); |
| | | pushUtil.pushOrderState(2, orderPrivateCar.getDriverId(), orderPrivateCar.getId(), 1, orderPrivateCar.getState(), 0); |
| | | Driver driver = driverService.selectById(orderPrivateCar.getDriverId()); |
| | | if (driver != null) { |
| | | driver.setState(2); |
| | | driverService.updateById(driver); |
| | | } |
| | | if (orderPrivateCar.getBindId() != null) { |
| | | chinaMobileUtil.midAxbUnBindSend(orderPrivateCar.getBindId(), orderPrivateCar.getTelX(), (System.currentTimeMillis() + 600000)); |
| | | } |
| | | } |
| | | System.out.println("余额退款通知940"); |
| | | systemNoticeService.addSystemNotice(1, "您的快车余额先付订单已取消,退款已退回账户余额,请注意查收。", orderPrivateCar.getUserId(), 1); |
| | | return ResultUtil.success(); |
| | | } |
| | | String outRequestNo = orderPrivateCar.getPrepaySecondPayNo(); |
| | | if (ToolUtil.isEmpty(outRequestNo)) { |
| | |
| | | |
| | | }else { |
| | | // 没找到车辆 |
| | | Thread.sleep(5000); |
| | | ResultUtil refundResult = handlePrivateCarPrepayCancelRefund(orderPrivateCar, "无司机接单", "无司机接单", orderPrivateCar.getUserId()); |
| | | if (refundResult == null) { |
| | | orderPrivateCar.setState(10); |
| | | orderPrivateCarMapper.updateById(orderPrivateCar); |
| | | } |
| | | pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 1); |
| | | pushUtil.pushEndPush(1, orderPrivateCar.getUserId(), orderPrivateCar.getId(), 1, 10); |
| | | } |
| | | |
| | | |
| | |
| | | * @param userId |
| | | * @throws Exception |
| | | */ |
| | | void addSystemNotice(Integer userType, String content, Integer userId, Integer noticeType) throws Exception; |
| | | void addSystemNotice(Integer userType, String content, Integer userId, Integer noticeType); |
| | | |
| | | |
| | | /** |
| | |
| | | * @throws Exception |
| | | */ |
| | | @Override |
| | | public void addSystemNotice(Integer userType, String content, Integer userId, Integer noticeType) throws Exception { |
| | | public void addSystemNotice(Integer userType, String content, Integer userId, Integer noticeType) { |
| | | SystemNotice systemNotice = new SystemNotice(); |
| | | systemNotice.setContent(content); |
| | | systemNotice.setInsertTime(new Date()); |
| | |
| | | post.form(params); |
| | | HttpResponse execute = post.execute(); |
| | | if (200 != execute.getStatus()) { |
| | | System.err.println("推送异常"); |
| | | System.err.println("推送异常"+execute.body()); |
| | | } else { |
| | | JSONObject jsonObject1 = JSON.parseObject(execute.body(), JSONObject.class); |
| | | if (jsonObject1.getIntValue("code") != 200) { |
| | |
| | | * @throws Exception |
| | | */ |
| | | void saveData(Integer userId, String remark, Double money, Integer state, |
| | | Integer type, Integer userType, Integer orderType, Integer orderId) throws Exception; |
| | | Integer type, Integer userType, Integer orderType, Integer orderId); |
| | | } |
| | |
| | | import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService; |
| | | import com.stylefeng.guns.modular.taxi.service.IPaymentRecordService; |
| | | import com.stylefeng.guns.modular.taxi.service.ITransactionDetailsService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.beans.factory.annotation.Value; |
| | |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | | |
| | | @Slf4j |
| | | @Service |
| | | @Transactional(isolation = Isolation.READ_UNCOMMITTED, propagation = Propagation.REQUIRED, rollbackFor = Exception.class) |
| | | public class OrderTaxiServiceImpl extends ServiceImpl<OrderTaxiMapper, OrderTaxi> implements IOrderTaxiService { |
| | |
| | | System.out.println("出租车退款111!!!!"); |
| | | if (!Integer.valueOf(2).equals(orderTaxi.getPaymentMode()) && StrUtil.isNotEmpty(orderTaxi.getPrepaySecondPayNo())) { |
| | | System.out.println("出租车退款2222!!!!"); |
| | | ResultUtil refundResult = handleTaxiPrepayCancelRefund(orderTaxi, reason, remark, uid); |
| | | if (refundResult != null) { |
| | | System.out.println("出租车退款3333!!!!"+refundResult.getCode()); |
| | | if (!ResultUtil.SUCCESS.equals(refundResult.getCode())) { |
| | | return refundResult; |
| | | } |
| | | Map<String, Object> map = new HashMap<>(); |
| | | map.put("id", null); |
| | | return ResultUtil.success(map); |
| | | } |
| | | }else if(!Integer.valueOf(2).equals(orderTaxi.getPaymentMode()) && StrUtil.isEmpty(orderTaxi.getPrepaySecondPayNo())){ |
| | | UserInfo userInfo = userInfoService.selectById(orderTaxi.getUserId()); |
| | | userInfo.setBalance(userInfo.getBalance() + orderTaxi.getPayMoney()); |
| | | userInfoService.updateById(userInfo); |
| | | handleTaxiPrepayCancelRefund(orderTaxi, reason); |
| | | } |
| | | if (null == orderTaxi.getDriverId()) {//没有接单的情况 |
| | | if (orderTaxi.getType() == 2) {//摆渡车 |
| | |
| | | } |
| | | } |
| | | |
| | | private void restoreTaxiBenefits(OrderTaxi orderTaxi) throws Exception { |
| | | private void restoreTaxiBenefits(OrderTaxi orderTaxi){ |
| | | if (null != orderTaxi.getCouponId()) { |
| | | UserCouponRecord userCouponRecord = userCouponRecordService.selectById(orderTaxi.getCouponId()); |
| | | if (userCouponRecord != null) { |
| | |
| | | return "PREPAY_REFUND_2_" + orderId+ ToolUtil.getRandomString(5); |
| | | } |
| | | |
| | | private void handleTaxiPrepayCancelRefund(OrderTaxi orderTaxi, String reason){ |
| | | if (Integer.valueOf(3).equals(orderTaxi.getPayType())) { |
| | | Double refundAmount = orderTaxi.getPayMoney(); |
| | | if (refundAmount == null || refundAmount <= 0) { |
| | | throw new RuntimeException("余额先付订单退款金额异常"); |
| | | } |
| | | UserInfo userInfo = userInfoService.selectById(orderTaxi.getUserId()); |
| | | if (userInfo == null) { |
| | | throw new RuntimeException("用户信息不存在,无法退款"); |
| | | } |
| | | userInfo.setBalance(new BigDecimal(null != userInfo.getBalance() ? userInfo.getBalance() : 0) |
| | | .add(new BigDecimal(refundAmount)).setScale(2, BigDecimal.ROUND_HALF_EVEN).doubleValue()); |
| | | userInfoService.updateById(userInfo); |
| | | restoreTaxiBenefits(orderTaxi); |
| | | transactionDetailsService.saveData(orderTaxi.getUserId(), "出租车取消订单退款", refundAmount, 1, 1, 1, 2, orderTaxi.getId()); |
| | | orderTaxi.setState(10); |
| | | orderTaxi.setPrepayStage(5); |
| | | orderTaxi.setPrepayRefundNo("BALANCE_REFUND_2_" + orderTaxi.getId() + "_" + ToolUtil.getRandomString(5)); |
| | | orderTaxi.setPrepayRefundAmount(refundAmount); |
| | | orderTaxi.setPrepayRefundTime(new Date()); |
| | | this.updateById(orderTaxi); |
| | | systemNoticeService.addSystemNotice(1, "您的出租车余额先付订单已取消,退款已退回账户余额,请注意查收。", orderTaxi.getUserId(), 1); |
| | | }else { |
| | | String outRequestNo = orderTaxi.getPrepaySecondPayNo(); |
| | | if (ToolUtil.isEmpty(outRequestNo)) { |
| | | throw new RuntimeException("微信先付订单缺少支付单号,无法关闭支付单"); |
| | | } |
| | | Double refundAmount = orderTaxi.getPayMoney(); |
| | | if (refundAmount == null || refundAmount <= 0) { |
| | | throw new RuntimeException("微信先付订单退款金额异常"); |
| | | } |
| | | CbyzxPayUtil.ClosePayOrderRequest request = new CbyzxPayUtil.ClosePayOrderRequest(); |
| | | request.setOutRequestNo(outRequestNo); |
| | | request.setRefundOutRequestNo(buildPrepayRefundOutNo(orderTaxi.getId())); |
| | | request.setRefundAmount(toFen(refundAmount)); |
| | | request.setRefundDesc(ToolUtil.isNotEmpty(reason) ? reason : "出租车订单取消退款"); |
| | | JSONObject response = CbyzxPayUtil.closePayOrder(request); |
| | | System.out.println("微信先付订单退款结果:" + response.toJSONString()); |
| | | if (!isTaxiPrepayRefundSuccess(response)) { |
| | | throw new RuntimeException(extractTaxiRefundMessage(response)); |
| | | } |
| | | restoreTaxiBenefits(orderTaxi); |
| | | transactionDetailsService.saveData(orderTaxi.getUserId(), "出租车取消订单退款", refundAmount, 1, 1, 1, 2, orderTaxi.getId()); |
| | | systemNoticeService.addSystemNotice(1, "您的出租车微信先付订单已取消,退款已原路退回,请注意查收。", orderTaxi.getUserId(), 1); |
| | | } |
| | | } |
| | | |
| | | private ResultUtil handleTaxiPrepayCancelRefund(OrderTaxi orderTaxi, String reason, String remark, Integer uid) throws Exception { |
| | | System.out.println("出租车退款!!!!"); |
| | | if (orderTaxi == null || !Integer.valueOf(1).equals(orderTaxi.getPaymentMode())) { |
| | |
| | | } |
| | | if (Integer.valueOf(3).equals(orderTaxi.getPayType())) { |
| | | Double refundAmount = orderTaxi.getPayMoney(); |
| | | System.out.println("余额退款金额!!!!"+ refundAmount); |
| | | if (refundAmount == null || refundAmount <= 0) { |
| | | return ResultUtil.error("余额先付订单退款金额异常"); |
| | | } |
| | |
| | | chinaMobileUtil.midAxbUnBindSend(orderTaxi.getBindId(), orderTaxi.getTelX(), (System.currentTimeMillis() + 600000)); |
| | | } |
| | | } |
| | | System.out.println("余额退款通知469"); |
| | | systemNoticeService.addSystemNotice(1, "您的出租车余额先付订单已取消,退款已退回账户余额,请注意查收。", orderTaxi.getUserId(), 1); |
| | | return ResultUtil.success(); |
| | | } |
| | | System.out.println("微信退款473"); |
| | | String outRequestNo = orderTaxi.getPrepaySecondPayNo(); |
| | | if (ToolUtil.isEmpty(outRequestNo)) { |
| | | return ResultUtil.error("微信先付订单缺少支付单号,无法关闭支付单"); |
| | |
| | | } |
| | | |
| | | private void handleTaxiPrepayFirstPaid(OrderTaxi orderTaxi, UserInfo userInfo, Double payAmount, Integer payType) throws Exception { |
| | | log.error("出租车预付回调-------519"); |
| | | OpenCity openCity = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()); |
| | | SysIntegral query1 = sysIntegralMapper.query(openCity.getId()); |
| | | if (null != query1) { |
| | |
| | | if (query == null) { |
| | | query = paymentRecordService.query(1, orderTaxi.getUserId(), 1, Integer.valueOf(id), 2, type, 1); |
| | | } |
| | | System.out.println("出租车预付回调-------572"); |
| | | if (null != query && query.getState() == 1) { |
| | | UserInfo userInfo = userInfoService.selectById(orderTaxi.getUserId()); |
| | | query.setState(2); |
| | | query.setCode(order_id); |
| | | paymentRecordService.updateById(query); |
| | | |
| | | System.out.println("出租车预付回调-------579,"+orderTaxi); |
| | | if (isTaxiPrepayFirstStage(orderTaxi)) { |
| | | orderTaxi.setPrepaySecondPayNo(outTradeNo); |
| | | handleTaxiPrepayFirstPaid(orderTaxi, userInfo, query.getAmount(), type); |
| | |
| | | if (!isPrepaySpreadStage) { |
| | | consumeTaxiBenefits(orderTaxi); |
| | | } |
| | | |
| | | System.out.println("出租车预付回调-------608"); |
| | | //非追缴单才添加收入记录 |
| | | if(0 == orderTaxi.getRecoveryOrder() && (Integer.valueOf(2).equals(orderTaxi.getPaymentMode()) || Integer.valueOf(5).equals(orderTaxi.getPrepayStage()))){ |
| | | //添加收入 |
| | |
| | | } |
| | | redisTemplate.opsForValue().set("VEHICLE", jsonArray.toJSONString()); |
| | | } |
| | | |
| | | |
| | | |
| | | System.out.println("出租车预付回调-------649"); |
| | | systemNoticeService.addSystemNotice(1, "您已使用" + (type == 1 ? "微信" : (type == 2 ? "支付宝" : "云闪付")) + "成功完成出行订单支付,谢谢使用!", orderTaxi.getUserId(), 1); |
| | | } else { |
| | | System.err.println("预支付数据异常(orderId = " + id + ")"); |
| | |
| | | } |
| | | |
| | | OpenCity openCity = openCityService.openCity1(orderTaxi.getStartLon().toString(), orderTaxi.getStartLat().toString()); |
| | | |
| | | System.out.println("城市city732,"+openCity); |
| | | // 判断是否为智能派单 |
| | | TSysPushType sysPushType = tSysPushTypeService.selectOne(new EntityWrapper<TSysPushType>().eq("openCityId", openCity.getId())); |
| | | System.out.println("推送方式735,"+sysPushType); |
| | | if(sysPushType!=null && sysPushType.getPushType()==2){ |
| | | System.out.println("指派模式732"); |
| | | OrderTaxi orderTaxi1 = orderTaxiMapper.selectById(orderTaxi.getId()); |
| | | if (null == orderTaxi1 && orderTaxi1.getState() == 1) { |
| | | System.out.println("orderTaxi1,"+orderTaxi1); |
| | | if (null != orderTaxi1 && orderTaxi1.getState() == 1) { |
| | | // 获取5公里内司机抢单 |
| | | List<Driver> listDriver = driverService.queryIdleDriver(2, orderTaxi1.getStartLon(), orderTaxi1.getStartLat(), 5.0, null);//查询5公里内空闲司机 |
| | | System.out.println("指派模式743"+listDriver); |
| | | if (listDriver.size() > 0) { |
| | | Driver driver1 = listDriver.stream().sorted(Comparator.comparingDouble(Driver::getDistance).reversed()).findFirst().get(); |
| | | |
| | |
| | | |
| | | }else { |
| | | // 没找到车辆 |
| | | Thread.sleep(5000); |
| | | OrderTaxi orderTaxi2 = orderTaxiMapper.selectById(orderTaxi.getId()); |
| | | System.out.println("指派模式830"); |
| | | ResultUtil refundResult = handleTaxiPrepayCancelRefund(orderTaxi2, "\u65e0\u53f8\u673a\u63a5\u5355", "\u65e0\u53f8\u673a\u63a5\u5355", orderTaxi2.getUserId()); |
| | | if (refundResult == null) { |
| | | orderTaxi2.setState(10); |
| | | orderTaxiMapper.updateById(orderTaxi2); |
| | | } |
| | | pushUtil.pushEndPush(1, orderTaxi2.getUserId(), orderTaxi2.getId(), 2, 1); |
| | | |
| | | pushUtil.pushEndPush(1, orderTaxi2.getUserId(), orderTaxi2.getId(), 2, 10); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | }else { |
| | | |
| | | System.out.println("推单模式836"); |
| | | List<PushOrder> querys = pushOrderService.querys(null, 2, openCity.getId());//查询推单配置 |
| | | //整轮派单结束,若无司机接单,系统自动增加派单5轮,若增加5轮后仍无司机接单,则系统结束派单,乘客端显示无司机接单、是否再次打车 |
| | | int num = 0; |
| | |
| | | */ |
| | | @Override |
| | | public void saveData(Integer userId, String remark, Double money, Integer state, Integer type, Integer userType, |
| | | Integer orderType, Integer orderId) throws Exception { |
| | | Integer orderType, Integer orderId) { |
| | | |
| | | TransactionDetails transactionDetails = new TransactionDetails(); |
| | | transactionDetails.setInsertTime(new Date()); |