package com.stylefeng.guns.modular.api; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.stylefeng.guns.core.util.MD5Util; import com.stylefeng.guns.core.util.ToolUtil; import com.stylefeng.guns.modular.smallLogistics.model.OrderLogistics; import com.stylefeng.guns.modular.smallLogistics.model.OrderLogisticsSpread; import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsService; import com.stylefeng.guns.modular.smallLogistics.server.impl.OrderLogisticsSpreadService; import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar; import com.stylefeng.guns.modular.specialTrain.server.IOrderPrivateCarService; import com.stylefeng.guns.modular.system.model.Car; import com.stylefeng.guns.modular.system.model.OrderPosition; import com.stylefeng.guns.modular.system.model.Reassign; import com.stylefeng.guns.modular.system.service.*; import com.stylefeng.guns.modular.system.util.*; import com.stylefeng.guns.modular.system.util.GoogleMap.FleetEngineUtil; import com.stylefeng.guns.modular.system.util.Tingg.model.CallbackRequest; import com.stylefeng.guns.modular.system.util.Tingg.model.CallbackResponse; import com.stylefeng.guns.modular.system.util.Tingg.model.Payments; import com.stylefeng.guns.modular.system.warpper.BaseWarpper; import com.stylefeng.guns.modular.system.warpper.MoneyInfoWarpper; import com.stylefeng.guns.modular.system.warpper.OrderInfoWarpper; import com.stylefeng.guns.modular.system.warpper.OrderListWarpper; 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.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import javax.validation.constraints.NotNull; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.util.*; /** * 订单相关控制器 */ @RestController @RequestMapping("") public class OrderController { @Autowired private IOrderService orderService; @Autowired private IDriverService driverService; @Autowired private IReassignService reassignService; @Autowired private PushUtil pushUtil; @Autowired private ChinaMobileUtil chinaMobileUtil; @Autowired private IOrderLogisticsService orderLogisticsService; @Autowired private IOrderPrivateCarService orderPrivateCarService; @Value("${filePath}") private String filePath; @Resource private FleetEngineUtil fleetEngineUtil; @Autowired private IOrderPositionService orderPositionService; @Autowired private RedisUtil redisUtil; @Autowired private ICarService carService; /** * 司机端获取首页订单列表 * @param state * @param pageNum * @param size * @param request * @return */ @ResponseBody @PostMapping("/api/order/queryOrderList") @ApiOperation(value = "获取首页订单列表", tags = {"司机端-首页"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "数据类型(1=服务中,2=待服务)", name = "state", required = true, dataType = "int"), @ApiImplicitParam(value = "页码,首页1", name = "pageNum", required = true, dataType = "int"), @ApiImplicitParam(value = "页条数", name = "size", required = true, dataType = "int"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil> queryOrderList(Integer state, Integer pageNum, Integer size, Integer language, HttpServletRequest request){ try { Integer uid = driverService.getUserIdFormRedis(request); if(null == uid){ return ResultUtil.tokenErr(); } List> list = orderService.queryOrderList(state, pageNum, size, uid, language); return ResultUtil.success(OrderListWarpper.getOrderListWarpper(list)); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 司机端获取首页订单列表 * @param state * @param pageNum * @param size * @param request * @return */ @ResponseBody @PostMapping("/api/order/queryOrderList1") @ApiOperation(value = "获取首页订单列表", tags = {"司机端-车载端"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "数据类型(1=服务中,2=待服务)", name = "state", required = true, dataType = "int"), @ApiImplicitParam(value = "页码,首页1", name = "pageNum", required = true, dataType = "int"), @ApiImplicitParam(value = "页条数", name = "size", required = true, dataType = "int"), @ApiImplicitParam(value = "订单类型(1=其他订单,2=小件物流)", name = "type", required = true, dataType = "int"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil> queryOrderList1(Integer state, Integer type, Integer pageNum, Integer size, Integer language, HttpServletRequest request){ try { Integer uid = driverService.getUserIdFormRedis(request); if(null == uid){ return ResultUtil.tokenErr(); } List> list = orderService.queryOrderList1(state, type, pageNum, size, uid, language); return ResultUtil.success(OrderListWarpper.getOrderListWarpper(list)); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 获取我的订单列表 * @param state * @param pageNum * @param size * @param request * @return */ @ResponseBody @PostMapping("/api/order/queryMyAllOrder") @ApiOperation(value = "获取我的订单列表【2.0】", tags = {"司机端-首页"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "数据类型(1=全部,2=待支付,3=已取消,4=已完成)", name = "state", required = true, dataType = "int"), @ApiImplicitParam(value = "页码,首页1", name = "pageNum", required = true, dataType = "int"), @ApiImplicitParam(value = "页条数", name = "size", required = true, dataType = "int"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil> queryMyAllOrder(Integer state, Integer pageNum, Integer size, Integer language, HttpServletRequest request){ try { Integer uid = driverService.getUserIdFormRedis(request); if(null == uid){ return ResultUtil.tokenErr(); } List listWarppers = orderService.queryMyAllOrder(state, pageNum, size, uid, language); return ResultUtil.success(listWarppers); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 获取抢单界面的订单详情 * @param orderId * @param orderType * @param lon * @param lat * @return */ @ResponseBody @PostMapping("/api/order/queryPushOrder") @ApiOperation(value = "获取抢单界面的订单详情【1.0】", tags = {"司机端-首页"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), @ApiImplicitParam(value = "订单类型(1=专车,4=小件物流-同城)", name = "orderType", required = true, dataType = "int"), @ApiImplicitParam(value = "当前定位经度", name = "lon", required = true, dataType = "string"), @ApiImplicitParam(value = "当前定位纬度", name = "lat", required = true, dataType = "string"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil queryPushOrder(Integer orderId, Integer orderType, String lon, String lat, Integer language){ try { Map map = orderService.queryPushOrder(orderId, orderType, lon, lat, language); OrderInfoWarpper orderInfoWarpper = OrderInfoWarpper.getOrderInfoWarpper(map); orderInfoWarpper.setOrderPositionList(""); return ResultUtil.success(orderInfoWarpper); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 司机抢单操作 * @param orderId * @param orderType * @param request * @return */ @ResponseBody @PostMapping("/api/order/grabOrder") @ApiOperation(value = "司机抢单操作", tags = {"司机端-首页"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), @ApiImplicitParam(value = "订单类型(1=专车,4=小件物流-同城)", name = "orderType", required = true, dataType = "int"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil grabOrder(Integer orderId, Integer orderType, Integer language, HttpServletRequest request){ try { Integer uid = driverService.getUserIdFormRedis(request); if(null == uid){ return ResultUtil.tokenErr(); } return orderService.grabOrder(orderId, orderType, uid, language); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } @Autowired private OrderLogisticsSpreadService spreadService; /** * 获取服务中页面订单详情 * @param orderId * @param orderType * @return */ @ResponseBody @PostMapping("/api/order/queryOrderInfo") @ApiOperation(value = "获取服务中页面订单详情【2.0】", tags = {"司机端-服务中"}, notes = "",response = OrderInfoWarpper.class) @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), @ApiImplicitParam(value = "订单类型(1=专车,4=小件物流-同城)", name = "orderType", required = true, dataType = "int"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil queryOrderInfo(Integer language, Integer orderId, Integer orderType){ try { Map map = orderService.queryOrderInfo(language, orderId, orderType); OrderInfoWarpper orderInfoWarpper = OrderInfoWarpper.getOrderInfoWarpper(map); File file = new File(filePath + orderId + "_" + orderType + ".txt"); if(file.exists()){ //读取文件(字符流) BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(file),"UTF-8")); //循环取出数据 String str = null; StringBuffer sb = new StringBuffer(); while ((str = in.readLine()) != null) { sb.append(str); } List list = JSONArray.parseArray(sb.toString(), OrderPosition.class); orderInfoWarpper.setOrderPositionList(JSONObject.toJSONString(list)); }else{ orderInfoWarpper.setOrderPositionList(""); } List orderLogisticsId = spreadService.selectList(new EntityWrapper().eq("orderLogisticsId", orderId)); if (!orderLogisticsId.isEmpty()){ double sum = 0; for (OrderLogisticsSpread orderLogisticsSpread : orderLogisticsId) { if (orderLogisticsSpread.getPayType()!=null&&orderLogisticsSpread.getPayType() == 4) { Double payMoney = orderLogisticsSpread.getPayMoney(); sum = sum + payMoney; } } sum = sum+orderInfoWarpper.getPayMoney(); orderInfoWarpper.setPayMoney(sum); } return ResultUtil.success(orderInfoWarpper); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 获取订单的改派金额 * @param orderId * @param orderType * @return */ @ResponseBody @PostMapping("/api/order/queryReassignMoney") @ApiOperation(value = "获取改派支付金额", tags = {"司机端-服务中"}, notes = "返回金额为0不需要调用支付") @ApiImplicitParams({ @ApiImplicitParam(value = "订单id(跨城多个订单使用逗号分隔)", name = "orderId", required = true, dataType = "string"), @ApiImplicitParam(value = "订单类型(1=专车,4=小件物流-同城)", name = "orderType", required = true, dataType = "int"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil queryReassignMoney(String orderId, Integer orderType){ try { String[] split = orderId.split(","); Double aDouble = orderService.queryReassignMoney(Integer.valueOf(split[0]), orderType); BaseWarpper baseWarpper = new BaseWarpper(); if(orderType == 3){ aDouble = aDouble * split.length; } baseWarpper.setAmount(aDouble); return ResultUtil.success(baseWarpper); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 司机提交改派申请 * @param reassign * @param request * @return */ @ResponseBody @PostMapping("/api/order/reassign") @ApiOperation(value = "提交改派申请", tags = {"司机端-服务中"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), @ApiImplicitParam(value = "订单类型(1=专车,2=出租车,4=小件物流-同城,5=小件物流-跨城)", name = "orderType", required = true, dataType = "int"), @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 reassign(Reassign reassign, Integer language, HttpServletRequest request){ try { Integer uid = driverService.getUserIdFormRedis(request); if(null == uid){ return ResultUtil.tokenErr(); } return reassignService.saveData(reassign, uid, null, language); }catch (SystemException s){ return ResultUtil.error(s.getMsg()); } catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 司机走流程操作 * @param orderId * @param orderType * @param state * @param lon * @param lat * @param request * @return */ @ResponseBody @PostMapping("/api/order/process") @ApiOperation(value = "司机走流程操作", tags = {"司机端-服务中"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), @ApiImplicitParam(value = "订单类型(1=专车,4=小件物流-同城)", name = "orderType", required = true, dataType = "int"), @ApiImplicitParam(value = "流程操作状态(3=开始出发预约点,4=到达预约点,5=开始服务,6=服务结束)", name = "state", required = true, dataType = "int"), @ApiImplicitParam(value = "手机号后四位", name = "phone", required = false, dataType = "String"), @ApiImplicitParam(value = "当前经度", name = "lon", required = true, dataType = "double"), @ApiImplicitParam(value = "当前纬度", name = "lat", required = true, dataType = "double"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil process(Integer orderId, Integer orderType, Integer state, Double lon, Double lat,String phone, String pickUpCode, Integer language, HttpServletRequest request){ try { Integer uid = driverService.getUserIdFormRedis(request); if(null == uid){ return ResultUtil.tokenErr(); } String format = String.format("uid=%s&orderId=%s&orderType=%s&state=%s", uid, orderId, orderType, state); String key = MD5Util.encrypt(format); String value = redisUtil.getValue(key); if(ToolUtil.isNotEmpty(value) && (System.currentTimeMillis() - Long.valueOf(value)) <= 1000){ return ResultUtil.error(language == 1 ? "请勿重复操作" : language == 2 ? "Don't repeat the operation" : "Ne répétez pas l’opération"); } redisUtil.setStrValue(key, System.currentTimeMillis() + "", 5); return orderService.process(orderId, orderType, state, uid, lon, lat, phone, pickUpCode, language); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 司机抢单操作(车载端) * @param orderId * @param orderType * @param request * @return */ @ResponseBody @PostMapping("/api/order/grabOrder_") @ApiOperation(value = "司机抢单操作", tags = {"司机端-车载端"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), @ApiImplicitParam(value = "订单类型(2=出租车,4=小件物流-同城,5=小件物流-跨城)", name = "orderType", required = true, dataType = "int"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil grabOrder_(Integer orderId, Integer orderType, HttpServletRequest request){ try { Integer uid = driverService.getUserIdFormRedis(request); if(null == uid){ return ResultUtil.tokenErr(); } return orderService.grabOrder_(orderId, orderType, uid); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 司机确认费用 * @param orderId * @param orderType * @param type * @param travelFee * @param parkingFee * @param crossingFee * @return */ @ResponseBody @PostMapping("/api/order/confirmFees") @ApiOperation(value = "司机确认费用", tags = {"司机端-服务中"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), @ApiImplicitParam(value = "订单类型(1=专车,2=出租车,3=城际,4=同城小件物流)", name = "orderType", required = true, dataType = "int"), @ApiImplicitParam(value = "行程费用(出租车必传)", name = "travelFee", required = false, dataType = "double"), @ApiImplicitParam(value = "停车费", name = "parkingFee", required = false, dataType = "double"), @ApiImplicitParam(value = "过路费", name = "crossingFee", required = false, dataType = "double"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil confirmFees(Integer language, Integer orderId, Integer orderType, Integer type, Double travelFee, Double parkingFee, Double crossingFee, HttpServletRequest request){ try{ Integer uid = driverService.getUserIdFormRedis(request); if(null == uid){ return ResultUtil.tokenErr(); } return orderService.confirmFees(language, orderId, orderType, type, travelFee, parkingFee, crossingFee, uid); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(null, e.getMessage()); } } /** * 司机确认费用(车载端) * @param orderId * @param orderType * @param type * @param travelFee * @return */ @ResponseBody @PostMapping("/api/order/confirmFees_") @ApiOperation(value = "司机确认费用(车载端)", tags = {"司机端-车载端"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), @ApiImplicitParam(value = "订单类型(2=出租车)", name = "orderType", required = true, dataType = "int"), @ApiImplicitParam(value = "支付方式(1=OK平台收款)", name = "type", required = true, dataType = "int"), @ApiImplicitParam(value = "行程费用", name = "travelFee", required = false, dataType = "double"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil confirmFees_(Integer orderId, Integer orderType, Integer type, Double travelFee, Double lon, Double lat){ try{ return orderService.confirmFees_(orderId, orderType, type, travelFee, lon, lat); }catch (Exception e){ e.printStackTrace(); System.err.println(lon + "," + lat); return ResultUtil.runErr(); } } /** * 获取待支付页详情 * @param orderId * @param orderType * @return */ @ResponseBody @PostMapping("/api/order/queryToBePaidPage") @ApiOperation(value = "获取待支付页详情", tags = {"司机端-服务中"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), @ApiImplicitParam(value = "订单类型(1=专车,2=出租车)", name = "orderType", required = true, dataType = "int"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil queryToBePaidPage(Integer language, Integer orderId, Integer orderType){ try { Map map = orderService.queryToBePaidPage(language, orderId, orderType); return ResultUtil.success(OrderInfoWarpper.getOrderInfoWarpper(map)); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 后台改派成功后的推送接口 * @param orderId * @param orderType * @return */ @ResponseBody @PostMapping("/base/order/pushOrderState") public String pushOrderState(Integer language, Integer orderId, Integer orderType, String from){ try { Map map = orderService.queryOrderInfo(language, orderId, orderType); //更新小号绑定关系 orderService.RebindMidAxbBindSend(orderId, orderType); pushUtil.pushOrderReassign(Integer.valueOf(String.valueOf(map.get("driverId"))), 2,Integer.valueOf(String.valueOf(map.get("orderId"))), orderType, ""); pushUtil.pushOrderReassign(Integer.valueOf(String.valueOf(map.get("userId"))), 1,Integer.valueOf(String.valueOf(map.get("orderId"))), orderType, ""); pushUtil.pushOrderState(1, Integer.valueOf(String.valueOf(map.get("userId"))), Integer.valueOf(String.valueOf(map.get("orderId"))), orderType, Integer.valueOf(String.valueOf(map.get("orderState"))), 0, "", from); return JSON.toJSONString(ResultUtil.success()); }catch (Exception e){ e.printStackTrace(); return JSON.toJSONString(ResultUtil.runErr()); } } @ResponseBody @PostMapping("/base/order/reassign_") @ApiOperation(value = "提交改派申请", tags = {"司机端-服务中"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), @ApiImplicitParam(value = "订单类型(1=专车,2=出租车,3=城际,4=小件物流-同城,5=小件物流-跨城,6=包车)", name = "orderType", required = true, dataType = "int"), @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"), }) public String reassign_(Reassign reassign, Integer uid, Integer language){ try { ResultUtil resultUtil = reassignService.saveData(reassign, uid, 3, language); return JSON.toJSONString(resultUtil); }catch (SystemException s){ return JSON.toJSONString(ResultUtil.error(s.getMsg())); } catch (Exception e){ e.printStackTrace(); return JSON.toJSONString(ResultUtil.runErr()); } } @ResponseBody @PostMapping("/base/order/test") public String test(String phoneA, String phoneB){ try { Map map = chinaMobileUtil.midAxbBindSend(phoneA, phoneB, 28); System.err.println(JSON.toJSONString(map)); }catch (Exception e){ e.printStackTrace(); return ""; } return null; } @ResponseBody @PostMapping("/base/order/test_") public String test(String bindId){ try { Map map = chinaMobileUtil.midAxbUnBindSend(bindId,""); }catch (Exception e){ e.printStackTrace(); return ""; } return null; } /** * 司机确认费用(车载端)不管之前数据状态直接修改到待支付(流程断网情况的处理流程) * @param orderId * @param orderType * @param type * @param travelFee * @param lon * @param lat * @return */ @ResponseBody @PostMapping("/api/order/confirmFees$") @ApiOperation(value = "司机确认费用(车载端)不管之前数据状态直接修改到已完成(流程断网情况的处理流程)", tags = {"司机端-车载端"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), @ApiImplicitParam(value = "订单类型(2=出租车)", name = "orderType", required = true, dataType = "int"), @ApiImplicitParam(value = "支付方式(1=OK平台收款)", name = "type", required = true, dataType = "int"), @ApiImplicitParam(value = "行程费用", name = "travelFee", required = false, dataType = "double"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil confirmFees$(Integer orderId, Integer orderType, Integer type, Double travelFee, Double lon, Double lat){ try{ return orderService.confirmFees$(orderId, orderType, type, travelFee, lon, lat); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/api/order/queryVoiceBroadcast") @ApiOperation(value = "接单后获取语音播报内容", tags = {"司机端-首页"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), @ApiImplicitParam(value = "订单类型(1=专车,2=出租车,3=城际,4=小件物流-同城,5=小件物流-跨城)", name = "orderType", required = true, dataType = "int"), @ApiImplicitParam(value = "当前位置经度", name = "lon", required = true, dataType = "string"), @ApiImplicitParam(value = "当前位置纬度", name = "lat", required = true, dataType = "string"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil queryVoiceBroadcast(Integer orderId, Integer orderType, String lon, String lat){ try { String s = orderService.queryVoiceBroadcast(orderId, orderType, lon, lat); return ResultUtil.success(s); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 手动确认订单完成 * @param orderId * @param orderType * @return */ @ResponseBody @PostMapping("/api/order/completeOrder") @ApiOperation(value = "手动确认订单完成", tags = {"司机端-服务中"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), @ApiImplicitParam(value = "订单类型(1=专车,2=出租车,4=同城小件物流)", name = "orderType", required = true, dataType = "int"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil completeOrder(Integer orderId, Integer orderType, Integer language){ try { return orderService.completeOrder(orderId, orderType, language); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/api/order/queryMoneyInfo") @ApiOperation(value = "获取订单费用明细【2.0】", tags = {"司机端-服务中"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), @ApiImplicitParam(value = "订单类型(1=专车,4=同城小件物流)", name = "orderType", required = true, dataType = "int"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil queryMoneyInfo(Integer orderId, Integer orderType){ try { Map map = orderService.queryMoneyInfo(orderId, orderType); return ResultUtil.success(MoneyInfoWarpper.getMoneyInfoWarpper(map)); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(null, e.getMessage()); } } @ResponseBody @PostMapping("/api/order/fillInPickUpCode") @ApiOperation(value = "验证小件物流取件码", tags = {"司机端-服务中"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), @ApiImplicitParam(value = "取件码", name = "pickUpCode", required = true, dataType = "string"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil fillInPickUpCode(Integer orderId, String pickUpCode, Integer language){ try { return orderLogisticsService.fillInPickUpCode(orderId, pickUpCode, language); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/api/order/makeUpTheDifference") @ApiOperation(value = "设置小件物流差价", tags = {"司机端-服务中"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), @ApiImplicitParam(value = "差价金额", name = "difference", required = true, dataType = "double"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil makeUpTheDifference(Integer orderId, Double difference, Integer language){ try { return orderLogisticsService.makeUpTheDifference(orderId, difference, language); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/api/order/sendVerificationCode") @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 sendVerificationCode(Integer orderId, Integer language){ try { orderLogisticsService.sendVerificationCode(orderId, language); return ResultUtil.success(); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/api/order/payOrder") @ApiOperation(value = "司机订单代付(现金收款)", tags = {"司机端-服务中"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), @ApiImplicitParam(value = "订单类型", name = "orderType", required = true, dataType = "int"), @ApiImplicitParam(value = "支付方式(1=手机支付,2=银行卡支付,3=余额)", name = "payType", required = true, dataType = "int"), @ApiImplicitParam(value = "银行卡id", name = "bankCardId", required = false, dataType = "int"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil payOrder(Integer orderId, Integer orderType, Integer payType, Integer bankCardId, Integer language, HttpServletRequest request){ try { Integer uid = driverService.getUserIdFormRedis(request); if(null == uid){ return ResultUtil.tokenErr(); } return orderService.payOrder(uid, orderId, orderType, payType, bankCardId, language); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } /** * 完成订单微信支付回调 * @param */ @ResponseBody @PostMapping("/base/wxPayOrderTaxi") public CallbackResponse wxPayOrderTaxi(@RequestBody CallbackRequest callbackRequest){ CallbackResponse callbackResponse = new CallbackResponse(); try { /** * 指示服务是否成功或付费的总体请求代码。。 * 177-部分付费请求 * 178-表明请求已全额支付 * 179-表示请求已部分支付但已过期。 * 129-请求已过期,未付款。 * 180.商户拒绝请求 * 183-商户接受请求,我们可以结算资金 * 188-商户收到请求。 */ String request_status_code = callbackRequest.getRequest_status_code(); String out_trade_no = callbackRequest.getMerchant_transaction_id(); if("177".equals(request_status_code) || "178".equals(request_status_code)){ Payments payments = callbackRequest.getPayments().get(0); String order_id = payments.getPayer_transaction_id(); if(ToolUtil.isNotEmpty(out_trade_no)){ Integer orderType = Integer.valueOf(out_trade_no.substring(17, 18)); Integer language = Integer.valueOf(out_trade_no.substring(18, 19)); Integer id = Integer.valueOf(out_trade_no.substring(19)); switch (orderType){ case 1: orderPrivateCarService.payOrderPrivateCarCallback(id, order_id, language); break; case 4: orderLogisticsService.payOrderLogisticsCallback(id, order_id, language); break; } callbackResponse.setCheckout_request_id(order_id); callbackResponse.setMerchant_transaction_id(out_trade_no); callbackResponse.setStatus_code("183"); callbackResponse.setStatus_description("Payment processed successfully"); callbackResponse.setReceipt_number(UUIDUtil.getRandomCode(16)); } }else{ callbackResponse.setCheckout_request_id(UUIDUtil.getRandomCode(16)); callbackResponse.setMerchant_transaction_id(out_trade_no); callbackResponse.setStatus_code("180"); callbackResponse.setStatus_description("means payment rejected."); callbackResponse.setReceipt_number(UUIDUtil.getRandomCode(16)); } }catch (Exception e){ e.printStackTrace(); } return callbackResponse; } @ResponseBody @PostMapping("/api/taxi/updateEndAddress") @ApiOperation(value = "处理乘客修改目的地【2.0】", tags = {"用户端-专车", "用户端-小件物流"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), @ApiImplicitParam(value = "订单类型", name = "orderType", required = true, dataType = "int"), @ApiImplicitParam(value = "状态(2=同意,3=拒绝)", name = "status", required = true, dataType = "int"), @ApiImplicitParam(value = "语言", name = "language", required = true, dataType = "int"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil updateEndAddress(Integer orderId, Integer orderType, Integer status){ if(null == orderId){ return ResultUtil.error("订单id不能为空"); } if(null == orderType){ return ResultUtil.error("订单类型不能为空"); } if(null == status){ return ResultUtil.error("状态不能为空"); } switch (orderType){ case 1: orderPrivateCarService.updateEndAddress(orderId, status); break; case 4: orderLogisticsService.updateEndAddress(orderId, status); break; } return ResultUtil.success(); } @ResponseBody @PostMapping("/api/taxi/getTripInfo") @ApiOperation(value = "获取google行程详情【2.0】", tags = {"用户端-专车", "用户端-小件物流"}, notes = "") @ApiImplicitParams({ @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"), @ApiImplicitParam(value = "订单类型", name = "orderType", required = true, dataType = "int"), @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....") }) public ResultUtil getTripInfo(Integer orderId, Integer orderType){ try { String tripId = null; switch (orderType){ case 1: OrderPrivateCar orderPrivateCar = orderPrivateCarService.selectById(orderId); tripId = orderPrivateCar.getTripId(); break; case 4: OrderLogistics orderLogistics = orderLogisticsService.selectById(orderId); tripId = orderLogistics.getTripId(); break; } String trip = fleetEngineUtil.getTrip(tripId); return ResultUtil.success(trip); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/base/taxi/getTripInfo") public ResultUtil getTripInfo(String tripId){ return ResultUtil.success(fleetEngineUtil.getTrip(tripId)); } /** * 更新google订单状态 * @param tripStatus * @param tripId * @return */ @ResponseBody @PostMapping("/base/taxi/editTripStatus") public ResultUtil editTripStatus(String tripStatus, String tripId){ boolean b = fleetEngineUtil.updateTrip(tripStatus, null, null, tripId, null, null, null, null, null, null); if(b){ return ResultUtil.success(); } return ResultUtil.error("更新失败"); } /** * 上传订单经纬度 * @param orderPosition * @return */ @ResponseBody @PostMapping("/api/order/saveOrderPosition") public ResultUtil saveOrderPosition(OrderPosition orderPosition, HttpServletRequest request){ try { Integer uid = driverService.getUserIdFormRedis(request); if(null == uid){ return ResultUtil.tokenErr(); } if(null != orderPosition.getOrderId()){ orderPosition.setDriverId(uid); orderPosition.setInsertTime(new Date()); orderPositionService.saveData(orderPosition); } redisUtil.setStrValue("DRIVER" + uid, orderPosition.getLon() + "," + orderPosition.getLat(), 300);//实时位置存入redis中 return ResultUtil.success(); }catch (Exception e){ e.printStackTrace(); return ResultUtil.runErr(); } } @ResponseBody @PostMapping("/base/taxi/editGoogleTripStatus") public ResultUtil editGoogleTripStatus(){ List privateCars = orderPrivateCarService.selectList(new EntityWrapper().isNotNull("tripId")); for (OrderPrivateCar privateCar : privateCars) { Integer state = privateCar.getState(); String tripId = privateCar.getTripId(); String trip = fleetEngineUtil.getTrip(tripId); if(ToolUtil.isNotEmpty(trip)){ JSONObject jsonObject = JSON.parseObject(trip); String tripStatus = jsonObject.getString("tripStatus"); Car car = carService.selectById(privateCar.getCarId()); if(Arrays.asList(10, 12).contains(state) && !"CANCELED".equals(tripStatus)){ //修改行程信息 boolean updateTrip = fleetEngineUtil.updateTrip("CANCELED", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, privateCar.getId(), 1); if(!updateTrip){ for (int i = 0; i < 5; i++) { updateTrip = fleetEngineUtil.updateTrip("CANCELED", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, privateCar.getId(), 1); if(updateTrip){ privateCar.setIsover(1); orderPrivateCarService.updateById(privateCar); break; } try { Thread.sleep(3000L); } catch (InterruptedException e) { e.printStackTrace(); } } }else{ privateCar.setIsover(1); orderPrivateCarService.updateById(privateCar); } } if(Arrays.asList(6, 7, 8, 9).contains(state) && !"COMPLETE".equals(tripStatus)){ //修改行程信息 boolean updateTrip = fleetEngineUtil.updateTrip("COMPLETE", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, privateCar.getId(), 1); if(!updateTrip){ for (int i = 0; i < 5; i++) { updateTrip = fleetEngineUtil.updateTrip("COMPLETE", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, privateCar.getId(), 1); if(updateTrip){ privateCar.setIsover(1); orderPrivateCarService.updateById(privateCar); break; } try { Thread.sleep(3000L); } catch (InterruptedException e) { e.printStackTrace(); } } }else{ privateCar.setIsover(1); orderPrivateCarService.updateById(privateCar); } } } } List orderLogisticsList = orderLogisticsService.selectList(new EntityWrapper().isNotNull("tripId")); for (OrderLogistics orderLogistics : orderLogisticsList) { Integer state = orderLogistics.getState(); String tripId = orderLogistics.getTripId(); String trip = fleetEngineUtil.getTrip(tripId); if(ToolUtil.isNotEmpty(trip)){ JSONObject jsonObject = JSON.parseObject(trip); String tripStatus = jsonObject.getString("tripStatus"); Car car = carService.selectById(orderLogistics.getCarId()); if(Arrays.asList(10, 12).contains(state) && !"CANCELED".equals(tripStatus)){ //修改行程信息 boolean updateTrip = fleetEngineUtil.updateTrip("CANCELED", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, orderLogistics.getId(), 4); if(!updateTrip){ for (int i = 0; i < 5; i++) { updateTrip = fleetEngineUtil.updateTrip("CANCELED", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, orderLogistics.getId(), 4); if(updateTrip){ orderLogistics.setIsover(1); orderLogisticsService.updateById(orderLogistics); break; } try { Thread.sleep(3000L); } catch (InterruptedException e) { e.printStackTrace(); } } }else{ orderLogistics.setIsover(1); orderLogisticsService.updateById(orderLogistics); } } if(Arrays.asList(6, 7, 8, 9).contains(state) && !"COMPLETE".equals(tripStatus)){ //修改行程信息 boolean updateTrip = fleetEngineUtil.updateTrip("COMPLETE", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, orderLogistics.getId(), 4); if(!updateTrip){ for (int i = 0; i < 5; i++) { updateTrip = fleetEngineUtil.updateTrip("COMPLETE", (null != car ? car.getVehicleId() : null), null, tripId, null, null, null, null, orderLogistics.getId(), 4); if(updateTrip){ orderLogistics.setIsover(1); orderLogisticsService.updateById(orderLogistics); break; } try { Thread.sleep(3000L); } catch (InterruptedException e) { e.printStackTrace(); } } }else{ orderLogistics.setIsover(1); orderLogisticsService.updateById(orderLogistics); } } } } return ResultUtil.success(); } @ResponseBody @PostMapping("/base/taxi/getTrips") public String getTrips(String vehicleId, Integer pageSize, String pageToken){ return fleetEngineUtil.getTrips(vehicleId, pageSize, pageToken); } @ResponseBody @GetMapping("/base/taxi/getTripsStatus") public ResultUtil>> getTripsStatus(){ String pageToken = null; List> list = new ArrayList<>(); while (true){ String trips = fleetEngineUtil.getTrips(null, 50, pageToken); if(ToolUtil.isEmpty(trips)){ break; } JSONObject jsonObject = JSON.parseObject(trips); JSONArray array = jsonObject.getJSONArray("trips"); if(null == array){ break; } for (int i = 0; i < array.size(); i++) { JSONObject trip = array.getJSONObject(i); String tripStatus = trip.getString("tripStatus"); String name = trip.getString("name"); Integer index = name.lastIndexOf("/") + 1; String tripId = name.substring(index); Map map = new HashMap<>(); map.put(tripId, tripStatus); list.add(map); } pageToken = jsonObject.getString("nextPageToken"); if(null == pageToken){ break; } } return ResultUtil.success(list); } }