package com.stylefeng.guns.modular.crossCity.controller;
|
|
|
import cn.hutool.core.io.FileUtil;
|
import cn.hutool.http.HttpRequest;
|
import cn.hutool.http.HttpResponse;
|
import cn.hutool.http.HttpUtil;
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.stylefeng.guns.core.util.ToolUtil;
|
import com.stylefeng.guns.modular.account.service.ITEnterpriseWithdrawalService;
|
import com.stylefeng.guns.modular.account.service.UserWithdrawalService;
|
import com.stylefeng.guns.modular.crossCity.model.LineShiftDriver;
|
import com.stylefeng.guns.modular.crossCity.server.ILineShiftDriverService;
|
import com.stylefeng.guns.modular.crossCity.server.IOrderCrossCityService;
|
import com.stylefeng.guns.modular.crossCity.warpper.OrderCrossCityInfoWrapper;
|
import com.stylefeng.guns.modular.crossCity.warpper.OrderCrossCityOnBehalfWarpper;
|
import com.stylefeng.guns.modular.crossCity.warpper.OrderCrossCityWarpper;
|
import com.stylefeng.guns.modular.crossCity.warpper.OrderWarpper;
|
import com.stylefeng.guns.modular.system.model.Reassign;
|
import com.stylefeng.guns.modular.system.service.ICompanyService;
|
import com.stylefeng.guns.modular.system.service.IDriverService;
|
import com.stylefeng.guns.modular.system.service.IReassignService;
|
import com.stylefeng.guns.modular.system.util.PayMoneyUtil;
|
import com.stylefeng.guns.modular.system.util.ResultUtil;
|
import com.stylefeng.guns.modular.system.util.SystemException;
|
import com.stylefeng.guns.modular.system.util.WeChatUtil;
|
import com.stylefeng.guns.modular.system.util.OssUploadUtil;
|
import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
|
import io.swagger.annotations.Api;
|
import io.swagger.annotations.ApiImplicitParam;
|
import io.swagger.annotations.ApiImplicitParams;
|
import io.swagger.annotations.ApiOperation;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Value;
|
import org.springframework.web.bind.annotation.*;
|
|
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletResponse;
|
import java.io.File;
|
import java.io.InputStream;
|
import java.io.PrintWriter;
|
import java.math.BigDecimal;
|
import java.util.Map;
|
import java.util.UUID;
|
|
|
@Api
|
@RestController
|
@RequestMapping("")
|
public class OrderCrossCityController {
|
|
@Autowired
|
private IOrderCrossCityService orderCrossCityService;
|
|
@Autowired
|
private IDriverService driverService;
|
|
@Autowired
|
private IReassignService reassignService;
|
|
@Autowired
|
private UserWithdrawalService userWithdrawalService;
|
@Autowired
|
private PayMoneyUtil payMoneyUtil;
|
@Autowired
|
private ICompanyService companyService;
|
@Autowired
|
private ITEnterpriseWithdrawalService enterpriseWithdrawalService;
|
|
@Autowired
|
private WeChatUtil weChatUtil;
|
|
@Autowired
|
private ILineShiftDriverService lineShiftDriverService;
|
|
@Value("${spring.profiles.active}")
|
private String env;
|
|
@Value("${filePath}")
|
private String filePath;
|
|
@Value("${qyt.admin_url}")
|
private String adminUrl;
|
|
|
|
/**
|
* 获取服务中页面订单详情
|
* @param orderId
|
* @return
|
*/
|
@ResponseBody
|
@PostMapping("/api/orderCrossCity/queryOrderInfo")
|
@ApiOperation(value = "获取跨城订单服务中详情", tags = {"司机端-服务中"}, notes = "")
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"),
|
@ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
|
})
|
public ResultUtil<OrderWarpper> queryOrderInfo(Integer orderId){
|
try {
|
Map<String, Object> map = orderCrossCityService.queryOrderInfo(orderId);
|
return ResultUtil.success(OrderWarpper.getOrderWarpper(map));
|
}catch (Exception e){
|
e.printStackTrace();
|
return ResultUtil.runErr();
|
}
|
}
|
|
|
/**
|
* 提交改派申请
|
* @param reassign
|
* @param orderIds
|
* @param request
|
* @return
|
*/
|
@ResponseBody
|
@PostMapping("/api/orderCrossCity/reassignOrderCrossCityReassign")
|
@ApiOperation(value = "提交改派申请(跨城)", tags = {"司机端-服务中"}, notes = "")
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "订单id(多个以逗号分隔)", name = "orderIds", required = true, dataType = "string"),
|
@ApiImplicitParam(value = "改派支付方式(1=微信,2=支付宝,3=余额)", name = "payType", required = false, dataType = "int"),
|
@ApiImplicitParam(value = "改派原因", name = "reason", required = true, dataType = "string"),
|
@ApiImplicitParam(value = "备注", name = "remark", required = false, dataType = "string"),
|
@ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
|
})
|
public ResultUtil reassignOrderCrossCityReassign(Reassign reassign, String orderIds, HttpServletRequest request){
|
try {
|
Integer uid = driverService.getUserIdFormRedis(request);
|
if(null == uid){
|
return ResultUtil.tokenErr();
|
}
|
return reassignService.saveData_(reassign, orderIds, uid, null);
|
}catch (SystemException s){
|
return ResultUtil.error(s.getMsg());
|
} catch (Exception e){
|
e.printStackTrace();
|
return ResultUtil.runErr();
|
}
|
}
|
|
|
/**
|
* 获取已完成订单明细
|
* @param orderId
|
* @return
|
*/
|
@ResponseBody
|
@PostMapping("/api/orderCrossCity/queryOrderCrossCityInfo")
|
@ApiOperation(value = "获取已完成的订单明细(跨城)", tags = {"司机端-服务中"}, notes = "")
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "跨城订单id", name = "orderId", required = true, dataType = "int"),
|
@ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
|
})
|
public ResultUtil<OrderCrossCityInfoWrapper> queryOrderCrossCityInfo(Integer orderId){
|
try {
|
Map<String, Object> map = orderCrossCityService.queryOrderCrossCityInfo(orderId);
|
return ResultUtil.success(OrderCrossCityInfoWrapper.getOrderInfoWarpper(map));
|
}catch (Exception e){
|
e.printStackTrace();
|
return ResultUtil.runErr();
|
}
|
}
|
|
/**
|
* 修改订单顺序
|
* @param orderId
|
* @return
|
*/
|
@ResponseBody
|
@PostMapping("/api/orderCrossCity/setOrderCrossCitySort")
|
@ApiOperation(value = "修改订单顺序(跨城)", tags = {"司机端-服务中"}, notes = "")
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "跨城订单id", name = "orderId", required = true, dataType = "int"),
|
@ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
|
})
|
public ResultUtil setOrderCrossCitySort(Integer orderId){
|
try {
|
orderCrossCityService.setOrderCrossCitySort(orderId);
|
return ResultUtil.success();
|
}catch (Exception e){
|
e.printStackTrace();
|
return ResultUtil.runErr();
|
}
|
}
|
|
|
/**
|
* 跨城出行下单操作
|
* @param orderCrossCityWarpper
|
* @param request
|
* @return
|
*/
|
@ResponseBody
|
@RequestMapping(value = "/api/order/orderCrossCity", method = RequestMethod.POST)
|
@ApiOperation(value = "跨城出行下单操作", tags = {"司机端-首页"}, notes = "先进行下单操作,再根据返回数据生成收款二维码")
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
|
})
|
public ResultUtil<BaseWarpper> orderCrossCity(OrderCrossCityWarpper orderCrossCityWarpper, HttpServletRequest request){
|
try {
|
Integer uid = driverService.getUserIdFormRedis(request);
|
if(null == uid){
|
return ResultUtil.tokenErr();
|
}
|
return orderCrossCityService.orderCrossCity(orderCrossCityWarpper, uid);
|
}catch (SystemException se){
|
return ResultUtil.error(se.getMessage());
|
}catch (Exception e){
|
e.printStackTrace();
|
return ResultUtil.runErr();
|
}
|
}
|
|
|
|
/**
|
* 扫码支付成功回调处理
|
* @param request
|
* @param response
|
*/
|
@ResponseBody
|
@PostMapping("/base/order/generatePay")
|
public void generatePay(HttpServletRequest request, HttpServletResponse response){
|
try {
|
// Map<String, String> map = icbcPayUtil.generatePayCallback(request);
|
// if(null != map){
|
// String out_trade_no = map.get("out_trade_no");
|
// String order_id = map.get("order_id");
|
// String s = icbcPayUtil.queryGeneratePayState("", order_id);
|
// if(s.equals("1")){
|
// icbcPayUtil.answer(response);//回调应答
|
// }
|
// if(ToolUtil.isNotEmpty(out_trade_no) && ToolUtil.isNotEmpty(order_id) && s.equals("1")){
|
// String[] split = out_trade_no.split(",");
|
// Integer id = Integer.valueOf(split[0]);
|
// Integer type = Integer.valueOf(split[1]);
|
// switch (type){
|
// case 1:
|
// break;
|
// case 2:
|
// break;
|
// case 3:
|
// orderCrossCityService.generatePayCallback(id, order_id);
|
// break;
|
// }
|
// }
|
// }
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
}
|
|
|
|
/**
|
* 订单完成支付订单操作
|
* @param payType
|
* @param orderId
|
* @param request
|
* @return
|
*/
|
@ResponseBody
|
@PostMapping("/api/order/payTaxiOrder")
|
@ApiOperation(value = "订单完成支付订单操作", tags = {"司机端-首页"}, notes = "")
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "支付方式(1=微信,2=支付宝,3=扫码支付,4=云闪付)", name = "payType", required = true, dataType = "int"),
|
@ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"),
|
@ApiImplicitParam(value = "订单类型(3=跨城)", name = "orderType", required = true, dataType = "int"),
|
@ApiImplicitParam(value = "优惠券id", name = "couponId", required = false, dataType = "int"),
|
@ApiImplicitParam(value = "支付端(1=用户APP端,2=司机APP端,3=用户小程序端)", name = "type", required = true, dataType = "int"),
|
@ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
|
})
|
public ResultUtil payTaxiOrder(Integer payType, Integer orderId, Integer orderType, Integer couponId, Integer type, HttpServletRequest request){
|
try {
|
Integer uid = driverService.getUserIdFormRedis(request);
|
if(null == uid){
|
return ResultUtil.tokenErr();
|
}
|
switch (orderType){
|
case 3:
|
return orderCrossCityService.payCrossCityOrder(payType, orderId, couponId, type);
|
}
|
return ResultUtil.success(new Object());
|
}catch (Exception e){
|
e.printStackTrace();
|
return ResultUtil.runErr();
|
}
|
}
|
|
|
|
/**
|
* 完成订单微信支付回调
|
* @param request
|
*/
|
@ResponseBody
|
@PostMapping("/base/wxPayCrossCity")
|
public void wxPayCrossCity(HttpServletRequest request, HttpServletResponse response){
|
try {
|
Map<String, String> map = payMoneyUtil.weixinpayCallback(request);
|
if(null != map){
|
System.err.println(JSON.toJSONString(map));
|
String out_trade_no = map.get("out_trade_no");
|
String transaction_id = map.get("transaction_id");
|
String result = map.get("result");
|
if(ToolUtil.isNotEmpty(out_trade_no) && ToolUtil.isNotEmpty(transaction_id)){
|
System.out.println("完成订单微信支付回调"+map);
|
PrintWriter out = response.getWriter();
|
out.write(result);
|
out.flush();
|
out.close();
|
|
String[] split = out_trade_no.split("_");
|
Integer id = Integer.valueOf(split[0]);
|
Integer type = Integer.valueOf(split[1]);
|
// TODO 司机云闪付 跨城出行微信回调支付充值
|
// OrderCrossCity orderCrossCity = orderCrossCityService.selectById(id);
|
// if(Objects.isNull(orderCrossCity)){
|
// System.out.println("该订单不存在");
|
// throw new RuntimeException("该订单不存在");
|
// }
|
// cloudPay(orderCrossCity.getDriverId(),map.get("total_fee"),map.get("transaction_id"),1);
|
switch (type){
|
case 3:
|
orderCrossCityService.payOrderCrossCityCallback(id, transaction_id, 1);
|
break;
|
}
|
}
|
}
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
}
|
|
|
@ResponseBody
|
@PostMapping("/base/aliPayCrossCity")
|
public void aliPayCrossCity(HttpServletRequest request, HttpServletResponse response){
|
try {
|
System.err.println("支付宝回调----->");
|
Map<String, String> map = payMoneyUtil.alipayCallback(request);
|
System.err.println(JSON.toJSONString(map));
|
if(null != map){
|
String out_trade_no = map.get("out_trade_no");
|
String trade_no = map.get("trade_no");
|
if(ToolUtil.isNotEmpty(out_trade_no) && ToolUtil.isNotEmpty(trade_no)){
|
String[] split = out_trade_no.split("_");
|
Integer id = Integer.valueOf(split[0]);
|
Integer type = Integer.valueOf(split[1]);
|
switch (type){
|
case 3:
|
orderCrossCityService.payOrderCrossCityCallback(id, trade_no, 2);
|
break;
|
}
|
String uid = map.get("passback_params");
|
System.out.println("完成订单支付宝支付回调"+map);
|
// TODO 司机云闪付 跨城出行支付宝回调支付充值
|
// OrderCrossCity orderCrossCity = orderCrossCityService.selectById(id);
|
// if(Objects.isNull(orderCrossCity)){
|
// System.out.println("该订单不存在");
|
// throw new RuntimeException("该订单不存在");
|
// }
|
// cloudPay(orderCrossCity.getDriverId(),map.get("total_amount"),map.get("trade_no"),0);
|
PrintWriter out = response.getWriter();
|
out.print("success");
|
out.flush();
|
out.close();
|
}
|
}
|
}catch (Exception e){
|
e.printStackTrace();
|
}
|
}
|
|
|
/**
|
* 生成跨城扫码下单小程序码
|
* @param lineShiftDriverId 司机排班记录ID(班次ID)
|
* @param otherFee 其他费用金额(可选)
|
* @param request HttpServletRequest
|
* @return 小程序码图片URL
|
*/
|
@ResponseBody
|
@PostMapping("/api/orderCrossCity/generateScanOrderQrCode")
|
@ApiOperation(value = "【202601】生成跨城扫码下单小程序码", tags = {"司机端-服务中"}, notes = "司机展示小程序码给客户扫码下单")
|
@ApiImplicitParams({
|
@ApiImplicitParam(value = "司机排班记录ID(班次ID)", name = "lineShiftDriverId", required = true, dataType = "int"),
|
@ApiImplicitParam(value = "其他费用金额", name = "otherFee", required = false, dataType = "BigDecimal"),
|
@ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
|
})
|
public ResultUtil<BaseWarpper> generateScanOrderQrCode(Integer lineShiftDriverId, BigDecimal otherFee, HttpServletRequest request) {
|
try {
|
// 1. 验证Token获取司机ID
|
Integer driverId = driverService.getUserIdFormRedis(request);
|
if (null == driverId) {
|
return ResultUtil.tokenErr();
|
}
|
|
// 2. 校验班次有效性
|
LineShiftDriver lineShiftDriver = lineShiftDriverService.selectById(lineShiftDriverId);
|
if (null == lineShiftDriver) {
|
return ResultUtil.error("班次信息不存在");
|
}
|
if (!driverId.equals(lineShiftDriver.getDriverId())) {
|
return ResultUtil.error("无权操作此班次");
|
}
|
|
// 3. 构建scene参数(最大32字符)
|
StringBuilder sceneBuilder = new StringBuilder();
|
sceneBuilder.append("id=").append(lineShiftDriverId);
|
if (ToolUtil.isNotEmpty(otherFee)) {
|
sceneBuilder.append("&f=").append(otherFee);
|
}
|
String scene = sceneBuilder.toString();
|
|
// 4. 生成小程序码
|
String page = "pages/scanOrder/scanOrder"; // 小程序跳转页面
|
String envVersion = env.equals("prod") ? "release" : "trial"; // 正式版环境
|
InputStream inputStream = weChatUtil.getwxacodeunlimit(page, scene, envVersion);
|
|
if (null == inputStream) {
|
return ResultUtil.error("生成小程序码失败");
|
}
|
|
// 5. 上传到服务器
|
File file = FileUtil.writeFromStream(inputStream, new File(filePath + "/" + UUID.randomUUID().toString() + ".png"));
|
HttpRequest post = HttpUtil.createPost(adminUrl + "/upload/image");
|
post.form("file", file);
|
HttpResponse execute = post.execute();
|
int status = execute.getStatus();
|
if(200 != status){
|
throw new RuntimeException("上传图片异常");
|
}
|
// 6. 返回结果
|
BaseWarpper baseWarpper = new BaseWarpper();
|
baseWarpper.setContent(JSONObject.parseObject(execute.body()).get("data").toString());
|
return ResultUtil.success(baseWarpper);
|
|
} catch (Exception e) {
|
e.printStackTrace();
|
return ResultUtil.runErr();
|
}
|
}
|
|
|
/**
|
* 跨城代客下单
|
* @param warpper 代客下单参数
|
* @param request HttpServletRequest
|
* @return 订单ID
|
*/
|
@ResponseBody
|
@PostMapping("/api/orderCrossCity/orderOnBehalf")
|
@ApiOperation(value = "【202601】跨城代客下单", tags = {"司机端-服务中"}, notes = "司机代乘客下单,乘客通过手机号登录小程序支付")
|
@ApiImplicitParams({
|
@ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
|
})
|
public ResultUtil<BaseWarpper> orderCrossCityOnBehalf(OrderCrossCityOnBehalfWarpper warpper, HttpServletRequest request) {
|
try {
|
// 1. 验证Token获取司机ID
|
Integer driverId = driverService.getUserIdFormRedis(request);
|
if (null == driverId) {
|
return ResultUtil.tokenErr();
|
}
|
|
// 2. 调用Service执行代客下单
|
return orderCrossCityService.orderCrossCityOnBehalf(warpper, driverId);
|
|
} catch (SystemException se) {
|
return ResultUtil.error(se.getMessage());
|
} catch (Exception e) {
|
e.printStackTrace();
|
return ResultUtil.runErr();
|
}
|
}
|
|
|
}
|