DispatchController.java
10.6 KB
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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
package com.sunyo.wlpt.dispatch.controller;
import com.github.pagehelper.PageInfo;
import com.sunyo.wlpt.dispatch.domain.DispatchNote;
import com.sunyo.wlpt.dispatch.domain.VehicleInfo;
import com.sunyo.wlpt.dispatch.response.ResultJson;
import com.sunyo.wlpt.dispatch.service.DispatchNoteService;
import com.sunyo.wlpt.dispatch.service.VehicleInfoService;
import com.sunyo.wlpt.dispatch.utils.GetUUID;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.apache.ibatis.annotations.Update;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import static java.util.stream.Collectors.toList;
/**
* @author 子诚
* Description:调度车辆
* 时间:2020/4/21 16:44
*/
@CrossOrigin
@Api(value = "调度车辆业务", tags = "业务——我要调度车辆")
@RequestMapping("dispatch")
@RestController
public class DispatchController {
@Resource
private VehicleInfoService vehicleInfoService;
@Resource
private DispatchNoteService dispatchNoteService;
/**
* 我要调度车辆.
*
* @param req {@link DispatchNote}
* @return 成功返回已调度的车辆信息
*/
@ApiOperation(value = "我要调度车辆", notes = "我要调度车辆")
@PostMapping("/dispatch")
public ResultJson dispatch(@RequestBody DispatchNote req) {
//返回前端的
ResultJson result = new ResultJson<>();
/**
* 1.获取到用户的需求
*/
Integer vehicleNumber = req.getVehicleNumber();
VehicleInfo vehicleInfo = new VehicleInfo();
// 匹配车辆条件,车辆状态为空闲(1)
vehicleInfo.setVehicleStatus("1");
// 匹配车辆条件,车辆类型
vehicleInfo.setVehicleType(req.getVehicleType());
// 2.根据用户的需求(车辆类型、数量进行匹配)
List<VehicleInfo> vehicleInfoList = vehicleInfoService.dispatchVehicle(vehicleInfo);
for (int i = 0; i < vehicleInfoList.size(); i++) {
System.out.println(vehicleInfoList.get(i));
}
// 3.对查询出来的结果进行匹配
if (vehicleInfoList.size() >= vehicleNumber) {
//取出前(需求)个
List<VehicleInfo> needList = vehicleInfoList.stream()
.limit(vehicleNumber)
.collect(toList());
for (int i = 0; i < needList.size(); i++) {
/**
* 1、通知车牌号为 XX 的车被调用,任务地点:场站位置;业务类型:XXXX
* //获取车牌号
* needList.get(i).getLicensePlateNumber();
* //获取场站位置
* req.getStation();
* //获取业务类型
* req.getDispatchType();
* //获取用户的姓名
* req.getUserName();
* //获取用户的联系方式
* req.getUserMobile();
*/
//2.修改车辆状态
needList.get(i).setVehicleStatus("2");
// 将车辆状态设置为执行状态
vehicleInfoService.updateByPrimaryKeySelective(needList.get(i));
/**
* 3.生成调度表业务
*/
// 生成调度记录表
DispatchNote dispatchNote = new DispatchNote();
//记录表,设置id
dispatchNote.setId(GetUUID.getuuid());
//记录表,设置用户的姓名
dispatchNote.setUserName(req.getUserName());
//记录表,设置用户的联系方式
dispatchNote.setUserMobile(req.getUserMobile());
//记录表,设置车牌号
dispatchNote.setLicensePlateNumber(needList.get(i).getLicensePlateNumber());
//记录表,设置调度业务类型
dispatchNote.setDispatchType(req.getDispatchType());
//记录表,设置场站位置
dispatchNote.setStation(req.getStation());
//记录表,每条记录表的车辆数为1
dispatchNote.setVehicleNumber(1);
//记录表,设置车辆类型
dispatchNote.setVehicleType(req.getVehicleType());
//记录表,设置记录状态为待执行状态(4)
dispatchNote.setStatus("4");
//记录表,设置创建时间
dispatchNote.setGmtCreate(new Date());
// 生成调度记录表
dispatchNoteService.insertSelective(dispatchNote);
}
//车辆匹配成功,返回车辆信息
result.setData(needList);
result.setCode("200");
result.setMsg("车辆调度成功!");
} else {
//车辆匹配失败
result.setCode("400");
result.setMsg("车辆繁忙,请稍后重试!");
}
return result;
}
/**
* 手动开启任务调度.
*
* @param req {@link DispatchNote}
* @return
*/
@ApiOperation(value = "开始工作", notes = "车辆被调度后,开始工作的时刻")
@PutMapping("/startTask")
public ResultJson startTask(@RequestBody DispatchNote req) {
ResultJson result = new ResultJson();
/**
* 设置调度记录表,开始任务时间(由客户端传递过来,比较精确)
*/
if (req.getBeginTime() == null) {
req.setBeginTime(new Date());
//设置为执行状态
req.setStatus("2");
int num = dispatchNoteService.updateByPrimaryKeySelective(req);
if (num > 0) {
result.setCode("200");
result.setMsg("手动开启调度任务,成功");
} else {
result.setCode("400");
result.setMsg("手动开启调度任务,失败");
}
}
return result;
}
/**
* 手动完成任务调度.
*
* @param req {@link DispatchNote}
* @return 成功完成任务
*/
@ApiOperation(value = "完成工作", notes = "车辆被调度后,完成工作的时刻")
@PutMapping("/completeTask")
public ResultJson completeTask(@RequestBody DispatchNote req) {
ResultJson result = new ResultJson();
/**
* 车辆信息表,修改
* 1.设置车辆信息表,为空闲状态(1)
* 2.设置车辆信息表开始空闲时间(任务的完成时间)
*/
if (req.getEndTime() == null) {
// 根据记录表中的车牌号,获取到车辆信息
String licensePlateNumber = req.getLicensePlateNumber();
VehicleInfo vehicleInfo = vehicleInfoService.selectByLPN(licensePlateNumber);
//设置车辆信息表,为空闲状态(1)
vehicleInfo.setVehicleStatus("1");
//设置车辆信息表,开始空闲时间
Date nowTime = new Date();
vehicleInfo.setFreetime(nowTime);
vehicleInfoService.updateByPrimaryKeySelective(vehicleInfo);
/**
* 调度记录表,修改
* 1.设置调度记录,完成时间
* 2.设置调度记录,完成状态(1)
*/
req.setStatus("1");
req.setEndTime(nowTime);
int num = dispatchNoteService.updateByPrimaryKeySelective(req);
if (num > 0) {
result.setCode("200");
result.setMsg("手动完成调度任务,成功");
} else {
result.setCode("400");
result.setMsg("手动完成调度任务,失败");
}
}
return result;
}
/**
* 取消调度车辆.
*
* @param req {@link DispatchNote}
* @return
*/
@ApiOperation(value = "取消调度车辆", notes = "判断了多种情况下,取消调度车辆")
@PutMapping("/cancel")
public ResultJson cancel(@RequestBody DispatchNote req) {
ResultJson result = new ResultJson();
/**
* 根据记录表中的车牌号,获取到车辆信息
*/
String licensePlateNumber = req.getLicensePlateNumber();
VehicleInfo vehicleInfo = vehicleInfoService.selectByLPN(licensePlateNumber);
/**
* 判断? 车辆是否为执行状态(2)
*/
String workingStatus = "2";
if (workingStatus.equals(vehicleInfo.getVehicleStatus())) {
/**
* 车辆状态,为执行状态(2),
* 判断调度记录表,开始时间是否为null
* 开始时间为null==>还没有开启调度任务
* 结束时间为null==>代表并没有完成任务
*/
if (req.getBeginTime() == null && req.getEndTime() == null) {
/**
* 设置车辆状态,为空闲状态("1")
* 设置车辆,开始空闲时间
* 将调度记录表的状态修改为撤销(取消)状态("3")
* 为调度记录表设置完成时间
*/
vehicleInfo.setVehicleStatus("1");
vehicleInfo.setFreetime(new Date());
vehicleInfoService.updateByPrimaryKeySelective(vehicleInfo);
req.setStatus("3");
req.setEndTime(new Date());
dispatchNoteService.updateByPrimaryKeySelective(req);
result.setCode("200");
result.setMsg("该调度车辆,已经取消");
} else {
/**
* 记录的开始时间不是null==>已经开始调度了
* 记录的结束时间不是null==>已经完成,或者已经取消了
* 所以,请求人工帮助
*/
result.setCode("400");
result.setMsg("请求,人工介入");
}
} else {
/**
* 车辆的状态不是执行状态(2),也就是说
* 将调度记录表的状态修改为撤销(取消)状态("3")
*/
req.setStatus("3");
dispatchNoteService.updateByPrimaryKeySelective(req);
result.setCode("200");
result.setMsg("该调度车辆,已经取消");
}
return result;
}
}