puzhibing
2024-05-06 cf71570fb38ad1983cd40e65fb09e259e509d2a3
UserIGOTravel/guns-admin/src/main/java/com/stylefeng/guns/modular/smallLogistics/controller/OrderLogisticsController.java
@@ -1,11 +1,18 @@
package com.stylefeng.guns.modular.smallLogistics.controller;
import com.stylefeng.guns.modular.smallLogistics.model.OrderLogistics;
import com.stylefeng.guns.modular.smallLogistics.server.IOrderLogisticsService;
import com.stylefeng.guns.modular.specialTrain.model.OrderPrivateCar;
import com.stylefeng.guns.modular.system.model.Region;
import com.stylefeng.guns.modular.system.model.UserRedPacketRecord;
import com.stylefeng.guns.modular.system.service.IUserInfoService;
import com.stylefeng.guns.modular.system.util.GoogleMap.DistancematrixVo;
import com.stylefeng.guns.modular.system.util.GoogleMap.GoogleMapUtil;
import com.stylefeng.guns.modular.system.util.PushUtil;
import com.stylefeng.guns.modular.system.util.ResultUtil;
import com.stylefeng.guns.modular.system.warpper.BaseWarpper;
import com.stylefeng.guns.modular.system.warpper.OrderTimeInfo;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
@@ -17,6 +24,9 @@
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.http.HttpServletRequest;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;
@@ -31,9 +41,10 @@
    @Autowired
    private IOrderLogisticsService orderLogisticsService;
    @Autowired
    private IUserInfoService userInfoService;
    @Autowired
    private PushUtil pushUtil;
    /**
@@ -65,16 +76,17 @@
    @ApiImplicitParams({
            @ApiImplicitParam(value = "业务类型(4=同城小件物流,5=跨城小件物流)", name = "type", required = true, paramType = "query", dataType = "int"),
            @ApiImplicitParam(value = "起点经纬度(103.23265,30.2312)", name = "startLonLat", required = true, paramType = "query", dataType = "string"),
            @ApiImplicitParam(value = "终点经纬度(103.23265,30.2312)", name = "endLonLat", required = true, paramType = "query", dataType = "string"),
            @ApiImplicitParam(value = "终点详细地址", name = "endAddress", required = true, paramType = "query", dataType = "string"),
            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResultUtil queryLogisticsUnitPrice(Integer type, String startLonLat, String endAddress, Integer language, HttpServletRequest request){
    public ResultUtil queryLogisticsUnitPrice(Integer type, String startLonLat, String endLonLat, String endAddress, Integer language, HttpServletRequest request){
        try {
            Integer uid = userInfoService.getUserIdFormRedis(request);
            if(null == uid){
                return ResultUtil.tokenErr();
            }
            return orderLogisticsService.queryLogisticsUnitPrice(type, startLonLat, endAddress, uid, language);
            return orderLogisticsService.queryLogisticsUnitPrice(type, startLonLat, endLonLat, endAddress, uid, language);
        }catch (Exception e){
            e.printStackTrace();
            return ResultUtil.runErr();
@@ -91,11 +103,12 @@
            @ApiImplicitParam(value = "货物数量", name = "number", required = true, paramType = "query", dataType = "int"),
            @ApiImplicitParam(value = "业务类型(4=同城小件物流,5=跨城小件物流)", name = "type", required = true, paramType = "query", dataType = "int"),
            @ApiImplicitParam(value = "起点经纬度(103.23265,30.2312)", name = "startLonLat", required = true, paramType = "query", dataType = "string"),
            @ApiImplicitParam(value = "终点经纬度(103.23265,30.2312)", name = "endLonLat", required = true, paramType = "query", dataType = "string"),
            @ApiImplicitParam(value = "终点详细地址", name = "endAddress", required = true, paramType = "query", dataType = "string")
    })
    public ResultUtil queryPayMoney(Integer number, Integer type, String startLonLat, String endAddress, Integer language){
    public ResultUtil queryPayMoney(Integer number, Integer type, String startLonLat, String endLonLat, String endAddress, Integer language){
        try {
            return orderLogisticsService.queryPayMoney(number, type, startLonLat, endAddress, language);
            return orderLogisticsService.queryPayMoney(number, type, startLonLat, endLonLat, endAddress, language);
        }catch (Exception e){
            e.printStackTrace();
            return ResultUtil.runErr();
@@ -137,6 +150,7 @@
            @ApiImplicitParam(value = "预约取货点详细地址", name = "startAddress", required = true, paramType = "query", dataType = "string"),
            @ApiImplicitParam(value = "收货人姓名", name = "recipient", required = true, paramType = "query", dataType = "string"),
            @ApiImplicitParam(value = "收货人电话", name = "recipientPhone", required = true, paramType = "query", dataType = "string"),
            @ApiImplicitParam(value = "终点经纬度(103.23265,30.2312)", name = "endLonLat", required = true, paramType = "query", dataType = "string"),
            @ApiImplicitParam(value = "收货详细地址", name = "endAddress", required = true, paramType = "query", dataType = "string"),
            @ApiImplicitParam(value = "是否加急(1=否,2=是)", name = "urgent", required = true, paramType = "query", dataType = "int"),
            @ApiImplicitParam(value = "加急费用", name = "tipMoney", required = true, paramType = "query", dataType = "double"),
@@ -145,19 +159,61 @@
            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResultUtil<BaseWarpper> smallLogistics(Integer type, Integer cargoType, Integer cargoNumber, String remark, String placementLon, String placementLat, String startLon, String startLat, String startAddress,
                                     String recipient, String recipientPhone, String endAddress, Integer urgent, Double tipMoney, Date travelTime, Integer orderSource, Integer language, HttpServletRequest request){
                                     String recipient, String recipientPhone, String endLonLat, String endAddress, Integer urgent, Double tipMoney, Date travelTime, Integer orderSource, Integer language, HttpServletRequest request){
        try {
            Integer uid = userInfoService.getUserIdFormRedis(request);
            if(null == uid){
                return ResultUtil.tokenErr();
            }
            return orderLogisticsService.smallLogistics(type, cargoType, cargoNumber, remark, placementLon, placementLat, startLon, startLat, startAddress,
                    recipient, recipientPhone, endAddress, urgent, tipMoney, travelTime, orderSource, uid, language);
                    recipient, recipientPhone, endLonLat, endAddress, urgent, tipMoney, travelTime, orderSource, uid, language);
        }catch (Exception e){
            e.printStackTrace();
            return ResultUtil.runErr();
        }
    }
    @ResponseBody
    @PostMapping("/api/orderLogistics/placeOrderPackage")
    @ApiOperation(value = "小件物流下单操作【2.0】", tags = {"用户端-小件物流"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "备注", name = "remark", required = false, paramType = "query", dataType = "string"),
            @ApiImplicitParam(value = "下单点经度", name = "placementLon", required = true, paramType = "query", dataType = "string"),
            @ApiImplicitParam(value = "下单点纬度", name = "placementLat", required = true, paramType = "query", dataType = "string"),
            @ApiImplicitParam(value = "起点经度", name = "startLon", required = true, paramType = "query", dataType = "string"),
            @ApiImplicitParam(value = "起点纬度", name = "startLat", required = true, paramType = "query", dataType = "string"),
            @ApiImplicitParam(value = "起点详细地址", name = "startAddress", required = true, paramType = "query", dataType = "string"),
            @ApiImplicitParam(value = "收货人姓名", name = "recipient", required = true, paramType = "query", dataType = "string"),
            @ApiImplicitParam(value = "收货人电话", name = "recipientPhone", required = true, paramType = "query", dataType = "string"),
            @ApiImplicitParam(value = "终点经度", name = "endLon", required = true, paramType = "query", dataType = "string"),
            @ApiImplicitParam(value = "终点纬度", name = "endLat", required = true, paramType = "query", dataType = "string"),
            @ApiImplicitParam(value = "收货详细地址", name = "endAddress", required = true, paramType = "query", dataType = "string"),
            @ApiImplicitParam(value = "车型id", name = "serverCarModelId", required = true, paramType = "query", dataType = "int"),
            @ApiImplicitParam(value = "司机id", name = "driverId", required = false, paramType = "query", dataType = "int"),
            @ApiImplicitParam(value = "下单方式(1:APP下单,2:扫码下单,3:小程序下单,4:司机下单,5:调度下单)", name = "orderSource", required = true, paramType = "query", dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResultUtil<BaseWarpper> placeOrderPackage(String remark, String placementLon, String placementLat, String startLon, String startLat, String startAddress,
                                                     String recipient, String recipientPhone, String endLon, String endLat, String endAddress, Integer serverCarModelId,
                                                     Integer driverId, Integer orderSource, Integer language, HttpServletRequest request){
        try {
            Integer uid = userInfoService.getUserIdFormRedis(request);
            if(null == uid){
                return ResultUtil.tokenErr();
            }
            return orderLogisticsService.placeOrderPackage(remark, placementLon, placementLat, startLon, startLat, startAddress,
                    recipient, recipientPhone, endLon, endLat, endAddress, serverCarModelId, driverId, orderSource, uid, language);
        }catch (Exception e){
            e.printStackTrace();
            return ResultUtil.runErr();
        }
    }
    @ResponseBody
    @PostMapping("/api/orderLogistics/queryLogisticsNumber")
@@ -185,20 +241,21 @@
    @ResponseBody
    @PostMapping("/api/orderLogistics/payOrderLogisticsSpread")
    @ApiOperation(value = "小件物流补差价支付", tags = {"用户端-小件物流"}, notes = "")
    @ApiOperation(value = "小件物流补差价支付【1.1】", tags = {"用户端-小件物流"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "支付方式(1=线上支付,3=余额,4=现金)", name = "payType", required = true, dataType = "int"),
            @ApiImplicitParam(value = "支付方式(1=手机支付,2=银行卡支付,3=余额,4=现金)", name = "payType", required = true, dataType = "int"),
            @ApiImplicitParam(value = "银行卡id", name = "bankCardId", required = false, dataType = "int"),
            @ApiImplicitParam(value = "订单id", name = "orderId", required = true, 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 payOrderLogisticsSpread(Integer orderId, Integer payType, Integer type, Integer language, HttpServletRequest request){
    public ResultUtil payOrderLogisticsSpread(Integer orderId, Integer payType, Integer bankCardId, Integer type, Integer language, HttpServletRequest request){
        try {
            Integer uid = userInfoService.getUserIdFormRedis(request);
            if(null == uid) {
                return ResultUtil.tokenErr();
            }
            return orderLogisticsService.payLogisticsOrder_(payType, "user_" + uid, orderId, type, language);
            return orderLogisticsService.payLogisticsOrder_(payType, bankCardId, orderId, type, language);
        }catch (Exception e){
            e.printStackTrace();
            return ResultUtil.runErr();
@@ -238,5 +295,63 @@
            return ResultUtil.runErr();
        }
    }
    @ResponseBody
    @PostMapping("/api/orderLogistics/queryTimeInfo")
    @ApiOperation(value = "获取订单详情中的时间信息内容【2.0】", 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<OrderTimeInfo> queryTimeInfo(Integer orderId, Integer language){
        try {
            OrderLogistics orderLogistics = orderLogisticsService.selectById(orderId);
            OrderTimeInfo orderTimeInfo = new OrderTimeInfo();
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            if(null != orderLogistics.getSnatchOrderTime()){
                orderTimeInfo.setSnatchOrderTime(sdf.format(orderLogistics.getSnatchOrderTime()));
            }
            if(null != orderLogistics.getStartServiceTime()){
                orderTimeInfo.setStartServiceTime(sdf.format(orderLogistics.getStartServiceTime()));
            }
            long time = System.currentTimeMillis() - orderLogistics.getSnatchOrderTime().getTime() / 60000;
            //TODO 待翻译
            orderTimeInfo.setUsedTime(Double.valueOf(time / 60).intValue() + "小时" + time % 60 + "分钟");
            if(null != orderLogistics.getEndServiceTime()){
                orderTimeInfo.setEndServiceTime(sdf.format(orderLogistics.getEndServiceTime()));
            }
            DistancematrixVo distancematrix = GoogleMapUtil.getDistancematrix(orderLogistics.getStartLat(), orderLogistics.getStartLon(), orderLogistics.getEndLat(), orderLogistics.getEndLon());
            Long distance = distancematrix.getDistance();
            orderTimeInfo.setAllMileage(Double.valueOf(distance / 1000));
            orderTimeInfo.setMileage(orderLogistics.getMileage() / 1000);
            return ResultUtil.success(orderTimeInfo);
        }catch (Exception e){
            e.printStackTrace();
            return ResultUtil.runErr();
        }
    }
    @ResponseBody
    @PostMapping("/api/orderLogistics/confirmDifferencePrice")
    @ApiOperation(value = "确认补差价【2.0】", tags = {"用户端-小件物流"}, notes = "")
    @ApiImplicitParams({
            @ApiImplicitParam(value = "订单id", name = "orderId", required = true, dataType = "int"),
            @ApiImplicitParam(value = "差价金额", name = "difference", required = true, dataType = "double"),
            @ApiImplicitParam(value = "状态(2=同意,3=拒绝)", name = "status", required = true, dataType = "int"),
            @ApiImplicitParam(name = "Authorization", value = "Bearer +token", required = true, dataType = "String", paramType = "header", defaultValue = "Bearer eyJhbGciOiJIUzUxMiJ9.....")
    })
    public ResultUtil confirmDifferencePrice(Integer orderId, Double difference, Integer status){
        OrderLogistics orderLogistics = orderLogisticsService.selectById(orderId);
        if(1 == status){
            orderLogistics.setPriceDifference(difference);
            orderLogisticsService.updateById(orderLogistics);
        }
        pushUtil.pushPayDifference(2, orderLogistics.getDriverId(), orderId, 4, difference, status);
        return ResultUtil.success();
    }
}