xuhy
2023-08-11 3c1223bf3eb6df077b48637a7c93a93246a1a8ae
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
package com.stylefeng.guns.modular.system.service.impl;
 
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.stylefeng.guns.core.util.ToolUtil;
import com.stylefeng.guns.modular.system.dao.OrderPositionMapper;
import com.stylefeng.guns.modular.system.model.OrderPosition;
import com.stylefeng.guns.modular.system.service.IOrderPositionService;
import com.stylefeng.guns.modular.system.service.IOrderService;
import com.stylefeng.guns.modular.system.util.GDMapElectricFenceUtil;
import com.stylefeng.guns.modular.system.util.PushMinistryOfTransportUtil;
import com.stylefeng.guns.modular.taxi.service.IOrderTaxiService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
 
import javax.annotation.Resource;
import java.io.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
 
 
@Service
public class OrderPositionServiceImpl extends ServiceImpl<OrderPositionMapper, OrderPosition> implements IOrderPositionService {
 
    @Resource
    private OrderPositionMapper orderPositionMapper;
 
    @Autowired
    private IOrderService orderService;
 
    @Autowired
    private PushMinistryOfTransportUtil pushMinistryOfTransportUtil;
 
    @Value("${filePath}")
    private String filePath;
 
    @Value("${pushMinistryOfTransport}")
    private boolean pushMinistryOfTransport;
 
 
 
    /**
     * 添加数据
     * @param orderPosition
     * @throws Exception
     */
    @Override
    public void saveData(OrderPosition orderPosition) throws Exception {
        //计算实时里程
        boolean b = orderService.calculateMileage(orderPosition);
        if(b){//如果计算了里程则将新的数据存储到数据库作为下个起点
            //先计算里程,在存储最新位置
            orderPosition.setInsertTime(new Date());
            //将数据存储到文件中
            List<OrderPosition> orderPositions = this.queryPosition(orderPosition.getOrderId(), orderPosition.getOrderType());
            File file = new File(filePath + orderPosition.getOrderId() + "_" + orderPosition.getOrderType() + ".txt");
            if(!file.exists()){
                file.getParentFile().mkdirs();
                file.createNewFile();
                file.setReadable(true, false);//设置读取权限
                file.setWritable(true, false);//设置写入权限
 
            }
            //写入相应的文件
            PrintWriter out = new PrintWriter(new FileWriter(file));
            orderPositions.add(orderPosition);
            System.err.println("存储新数据:" + JSON.toJSONString(orderPositions));
            out.write(JSON.toJSONString(orderPositions));
            out.flush();
            out.close();
        }
 
        new Thread(new Runnable() {
            @Override
            public void run() {
                if(pushMinistryOfTransport && orderPosition.getOrderType() == 1){//上传数据
                    pushMinistryOfTransportUtil.positionDriver(orderPosition.getOrderId());
                    pushMinistryOfTransportUtil.positionVehicle(orderPosition.getOrderId());
                }
            }
        }).start();
 
    }
 
 
    /**
     * 获取最新的坐标位置
     * @param orderId
     * @param orderType
     * @return
     * @throws Exception
     */
    @Override
    public OrderPosition queryNew(Integer orderId, Integer orderType) throws Exception {
        List<OrderPosition> orderPositions = this.queryPosition(orderId, orderType);
        return orderPositions.size() > 0 ? orderPositions.get(orderPositions.size() - 1) : null;
    }
 
 
    /**
     * 获取坐标文件中的坐标数据
     * @param orderId
     * @param orderType
     * @return
     * @throws Exception
     */
    @Override
    public List<OrderPosition> queryPosition(Integer orderId, Integer orderType) throws Exception{
        //将数据存储到文件中
        File file = new File(filePath + orderId + "_" + orderType + ".txt");
        if(!file.exists()){
            return 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<OrderPosition> list = new ArrayList<>();
        if(ToolUtil.isNotEmpty(sb.toString())){
            list = JSONArray.parseArray(sb.toString(), OrderPosition.class);
        }
        System.err.println("坐标:" + sb);
        return list;
    }
}