puzhibing
2023-06-23 353b56200fa196f461902b4608341a0939a7abc2
修改bug
4个文件已修改
244 ■■■■ 已修改文件
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TOrderController.java 57 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java 13 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/resources/application.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/webapp/WEB-INF/view/system/tOrder/tOrderDetail.html 170 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/controller/general/TOrderController.java
@@ -2,10 +2,12 @@
import cn.hutool.core.date.DateUnit;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.stylefeng.guns.core.base.controller.BaseController;
import com.stylefeng.guns.core.base.tips.SuccessTip;
import com.stylefeng.guns.core.log.LogObjectHolder;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.system.controller.resp.TAppUserDetailOrderResp;
import com.stylefeng.guns.modular.system.controller.resp.TDriverCommissionResp;
import com.stylefeng.guns.modular.system.controller.resp.TOrderResp;
@@ -14,15 +16,20 @@
import com.stylefeng.guns.modular.system.model.TAppUser;
import com.stylefeng.guns.modular.system.model.TDriver;
import com.stylefeng.guns.modular.system.model.TOrder;
import com.stylefeng.guns.modular.system.model.TOrderPosition;
import com.stylefeng.guns.modular.system.service.ITAppUserService;
import com.stylefeng.guns.modular.system.service.ITCancelOrderService;
import com.stylefeng.guns.modular.system.service.ITDriverService;
import com.stylefeng.guns.modular.system.service.ITOrderService;
import com.stylefeng.guns.modular.system.util.RedisUtil;
import com.stylefeng.guns.modular.system.util.ResultUtil;
import io.swagger.annotations.ApiImplicitParam;
import io.swagger.annotations.ApiImplicitParams;
import io.swagger.annotations.ApiOperation;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
@@ -31,7 +38,7 @@
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletResponse;
import java.io.OutputStream;
import java.io.*;
import java.math.BigDecimal;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
@@ -58,6 +65,15 @@
    private ITAppUserService tAppUserService;
    @Autowired
    private ITCancelOrderService tCancelOrderService;
    @Autowired
    private RedisUtil redisUtil;
    @Autowired
    private ITDriverService driverService;
    @Value("${filePath}")
    private String filePath;
    /**
     * 跳转到首页
@@ -227,6 +243,39 @@
        return list;
    }
    @RequestMapping(value = "/getOrderTrack")
    @ResponseBody
    public ResultUtil getOrderTrack(Integer orderDetailId){
        if(ToolUtil.isNotEmpty(orderDetailId)){
            try {
                //将数据存储到文件中
                File file = new File(filePath + orderDetailId + ".json");
                if(!file.exists()){
                    return ResultUtil.success(new ArrayList<>());
                }
                //读取文件(字符流)
                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<TOrderPosition> list = JSONArray.parseArray(sb.toString(), TOrderPosition.class);
                return ResultUtil.success(list);
            }catch (Exception e){
                e.printStackTrace();
                return ResultUtil.runErr();
            }
        }else {
            return ResultUtil.paranErr();
        }
    }
    /**
     * 关闭订单
     */
@@ -236,6 +285,12 @@
        TOrder tOrder = tOrderService.selectById(tOrderId);
        tOrder.setState(OrderStateEnum.CANCELED.getCode());
        tOrderService.updateById(tOrder);
        if(null != tOrder.getDriverId()){
            redisUtil.delSetValue("orderService", tOrder.getId().toString());
            TDriver tDriver = driverService.selectById(tOrder.getDriverId());
            tDriver.setServerStatus(1);
            driverService.updateById(tDriver);
        }
        return SUCCESS_TIP;
    }
management/guns-admin/src/main/java/com/stylefeng/guns/modular/system/service/impl/TOrderServiceImpl.java
@@ -23,6 +23,7 @@
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
@@ -39,13 +40,16 @@
@Service
public class TOrderServiceImpl extends ServiceImpl<TOrderMapper, TOrder> implements ITOrderService {
    @Autowired
    @Resource
    private TOrderMapper tOrderMapper;
    @Autowired
    @Resource
    private TAppUserMapper tAppUserMapper;
    @Autowired
    @Resource
    private TDriverMapper tDriverMapper;
    @Autowired
    @Resource
    private TBranchOfficeMapper tBranchOfficeMapper;
    @Override
@@ -67,6 +71,7 @@
    public void orderDetail(Integer orderId, Model model) {
        // 订单信息
        TOrder tOrder = tOrderMapper.selectById(orderId);
        model.addAttribute("id", orderId);
        model.addAttribute("createTime",new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(tOrder.getCreateTime()));//下单时间
        model.addAttribute("code",tOrder.getCode());//订单编号
        model.addAttribute("source",tOrder.getSource());//订单来源
management/guns-admin/src/main/resources/application.yml
@@ -79,9 +79,9 @@
---
#支付回调地址
#正式环境
#callbackPath: https://okyueche.com:8010
callbackPath: https://chaoshengdaijia.com:8443
#测试环境
callbackPath: http://121.37.15.157:8010
#callbackPath: http://121.37.15.157:8010
---
management/guns-admin/src/main/webapp/WEB-INF/view/system/tOrder/tOrderDetail.html
@@ -13,6 +13,7 @@
                        <input hidden id="startLat" value="${startLat}">
                        <input hidden id="endLng" value="${endLng}">
                        <input hidden id="endLat" value="${endLat}">
                        <input hidden id="id" value="${id}">
                        <hr/>
                        <div class="initialLevel col-sm-12 control-label form-group"  >
@@ -179,20 +180,28 @@
                            </div>
                        @}
                        @if(startLng != null){
                            <hr/>
                            <div class="initialLevel col-sm-12 control-label form-group"  >
                                <div style="background-color: gray;height: 35px;line-height: 35px">
                                    <label style="color: #0C0C0C">行程轨迹</label>
                        <div class="row" style="margin-top: 30px;">
                            <div class="col-sm-4">
                                <h2 class="h3Class" style="font-weight: 700;">线路轨迹</h2>
                            </div>
                        </div>
                        <div class="row">
                            <div class="col-sm-10">
                                <div class="form-horizontal" id="container" style="margin-left: 50px;width: 100%; height: 500px;"></div>
                                <div class="input-card" style="margin-left: 50px;">
                                    <h4>轨迹回放控制</h4>
                                    <div class="input-item">
                                        <input type="button" class="btn" value="开始动画" id="start" onclick="startAnimation()"/>
                                        <input type="button" class="btn" value="暂停动画" id="pause" onclick="pauseAnimation()"/>
                                        <input type="button" class="btn" value="继续动画" id="resume" onclick="resumeAnimation()"/>
                                        <input type="button" class="btn" value="停止动画" id="stop" onclick="stopAnimation()"/>
                                    </div>
                                    <div class="input-item">
                                    </div>
                                </div>
                            </div>
                            <hr/>
                            <div class="initialLevel col-sm-12 control-label form-group"  >
                                <div id="container" ></div>
                                <div id="panel" ></div>
                            </div>
                        @}
                        </div>
                        <hr/>
                        <div class="initialLevel col-sm-12 control-label form-group"  >
@@ -202,12 +211,14 @@
                        </div>
                        <hr/>
                        @if(routeRecord != null){
                        <div class="initialLevel col-sm-12 control-label form-group"  >
                            <audio id="audio" autoplay controls muted>
<!--                                <source src="http://www.w3capi.com/upload/audio/audio_example.mp3" type="audio/mpeg">-->
                                <source src="${routeRecord}" type="audio/mpeg">
                            </audio>
                        </div>
                        @}
                        <div class="hidden-xs" id="TDriverTableToolbar" role="group"  style="text-align: center">
                            <#button name="取消" icon="fa-plus" clickFun="TOrderInfoDlg.close()" />
@@ -221,10 +232,9 @@
</div>
<script src="${ctxPath}/static/modular/system/tOrder/tOrder.js"></script>
<script src="${ctxPath}/static/modular/system/tOrder/tOrder_info.js"></script>
<!--<script type="text/javascript" src="https://webapi.amap.com/maps?v=2.0&key=1d43098bcd98ab124623e7e4bcc9595e&plugin=AMap.Driving"></script>-->
<!--<script type="text/javascript" src="https://a.amap.com/jsapi_demos/static/demo-center/js/demoutils.js"></script>-->
<!--<script type="text/javascript" src="https://cache.amap.com/lbs/static/addToolbar.js"></script>-->
<script src="https://a.amap.com/jsapi_demos/static/demo-center/js/demoutils.js"></script>
<script src="https://webapi.amap.com/maps?v=1.4.15&key=1d43098bcd98ab124623e7e4bcc9595e"></script>
<script src="https://cache.amap.com/lbs/static/addToolbar.js"></script>
<script src="https://webapi.amap.com/loader.js"></script>
<style type="text/css">
@@ -266,44 +276,100 @@
        type: 'date',
        range: true
    });
    if(null != $('#startLng').val() && '' != $('#startLng').val()){
        AMapLoader.reset() // 需要把这个reset一下
        AMapLoader.load({
            "key": "1d43098bcd98ab124623e7e4bcc9595e",              // 申请好的Web端开发者Key,首次调用 load 时必填
            "version": "2.0",   // 指定要加载的 JSAPI 的版本,缺省时默认为 1.4.15
            "plugins": ['AMap.Driving'],           // 需要使用的的插件列表,如比例尺'AMap.Scale'等
            "AMapUI": {             // 是否加载 AMapUI,缺省不加载
                "version": '1.1',   // AMapUI 版本
                "plugins":['overlay/SimpleMarker'],       // 需要加载的 AMapUI ui插件
    var map = new AMap.Map("container", {
        resizeEnable: true,
        zoom: 14
    });
    $(function() {
        getTrajectory();
    });
    function getTrajectory() {
        $.ajax({
            url: Feng.ctxPath + '/tOrder/getOrderTrack',
            type: 'POST',
            data:{
                orderDetailId: $("#id").val()
            },
            "Loca":{                // 是否加载 Loca, 缺省不加载
                "version": '2.0'  // Loca 版本
            },
        }).then((AMap)=>{
            //初始化地图对象,加载地图
            var map = new AMap.Map('container', {
                viewMode: '2D', // 默认使用 2D 模式,如果希望使用带有俯仰角的 3D 模式,请设置 viewMode: '3D',
                zoom:13, //初始化地图层级
                center: [$('#startLng').val(), $('#startLat').val()] //初始化地图中心点
            });
            //构造路线导航类
            var driving = new AMap.Driving({
                map: map,
            });
            // 根据起终点经纬度规划驾车导航路线
            driving.search(new AMap.LngLat($('#startLng').val(), $('#startLat').val()), new AMap.LngLat($('#endLng').val(), $('#endLat').val()), function(status, result) {
                // result 即是对应的驾车导航信息,相关数据结构文档请参考  https://lbs.amap.com/api/javascript-api/reference/route-search#m_DrivingResult
                if (status === 'complete') {
                    Feng.success('绘制订单路线完成')
                } else {
                    Feng.error('获取驾车数据失败:' + result)
            success: function (res) {
                if(res.status == 200){
                    var data = res.data;
                    if(data.length > 0){
                        orderTrack(data);
                    }/*else{
                    Feng.error("当前订单没有轨迹");
                }*/
                }else{
                    Feng.error(res.msg);
                }
            });
        }).catch((e)=>{
            console.error(e);  //加载错误提示
            }
        });
    }else {
        Feng.info('该订单未完成,无地图路线显示!')
    }
    var marker, lineArr = [];
    function orderTrack(data) {
        for(var i in data){
            var waypoints = [];
            var lon = parseFloat(data[i].lon);
            var lat = parseFloat(data[i].lat);
            waypoints.push(lon);
            waypoints.push(lat);
            lineArr.push(waypoints);
        }
        marker = new AMap.Marker({
            map: map,
            position: lineArr[0],
            icon: "https://webapi.amap.com/images/car.png",
            offset: new AMap.Pixel(-26, -13),
            autoRotation: true,
            angle:-90,
        });
        // 绘制轨迹
        var polyline = new AMap.Polyline({
            map: map,
            path: lineArr,
            showDir:true,
            strokeColor: "#28F",  //线颜色
            // strokeOpacity: 1,     //线透明度
            strokeWeight: 6,      //线宽
            // strokeStyle: "solid"  //线样式
        });
        var passedPolyline = new AMap.Polyline({
            map: map,
            // path: lineArr,
            strokeColor: "#AF5",  //线颜色
            // strokeOpacity: 1,     //线透明度
            strokeWeight: 6,      //线宽
            // strokeStyle: "solid"  //线样式
        });
        marker.on('moving', function (e) {
            passedPolyline.setPath(e.passedPath);
        });
        map.setFitView();
    }
    function startAnimation () {
        marker.moveAlong(lineArr, 200);
    }
    function pauseAnimation () {
        marker.pauseMove();
    }
    function resumeAnimation () {
        marker.resumeMove();
    }
    function stopAnimation () {
        marker.stopMove();
    }