|
|
@@ -315,30 +315,46 @@ public class TblDzbcPathSchedulingServiceImpl implements ITblDzbcPathSchedulingS
|
|
|
*/
|
|
|
@Override
|
|
|
public Boolean updateByBo(TblDzbcPathSchedulingBo bo) {
|
|
|
+ // 固定班次(type=2)校验:已发车或完成的不允许修改
|
|
|
+ if (bo.getType() != null && bo.getType() == 2 && bo.getId() != null) {
|
|
|
+ TblDzbcDriverTrip trip = driverTripMapper.selectOne(
|
|
|
+ new LambdaQueryWrapper<TblDzbcDriverTrip>()
|
|
|
+ .apply("ext2->'$.schedulingId' = {0}", bo.getId())
|
|
|
+ .last("LIMIT 1")
|
|
|
+ );
|
|
|
+ if (trip != null && trip.getStatus() != null && trip.getStatus() >= 1) {
|
|
|
+ // status: 0-待发车 1-运行中 2-已完成 3-已取消
|
|
|
+ String statusMsg = trip.getStatus() == 1 ? "已发车" : (trip.getStatus() == 2 ? "已完成" : "已取消");
|
|
|
+ throw new RuntimeException("该排班" + statusMsg + ",不允许修改");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
TblDzbcPathScheduling update = MapstructUtils.convert(bo, TblDzbcPathScheduling.class);
|
|
|
validEntityBeforeSave(update);
|
|
|
int c = baseMapper.updateById(update) ;
|
|
|
if(c>0){
|
|
|
Map<String, Object> params = bo.getParams();
|
|
|
TblDzbcPathScheduling add = baseMapper.selectById(update.getId());
|
|
|
+ SysUserVo driverVo = null;
|
|
|
+ TblDzbcCarVo carVo = null;
|
|
|
if(add.getCarId()!=null){
|
|
|
- TblDzbcCarVo carVo = carMapper.selectVoById(bo.getCarId());
|
|
|
+ carVo = carMapper.selectVoById(bo.getCarId());
|
|
|
|
|
|
if(carVo == null){
|
|
|
throw new RuntimeException("车辆不存在");
|
|
|
}
|
|
|
SysUserVo userVo = userMapper.selectUserById(carVo.getDriverId());
|
|
|
- SysUserVo userVo1 = new SysUserVo();
|
|
|
- userVo1.setUserId(userVo.getUserId());
|
|
|
- userVo1.setUserName(userVo.getUserName());
|
|
|
- userVo1.setNickName(userVo.getNickName());
|
|
|
- userVo1.setPhonenumber(userVo.getPhonenumber());
|
|
|
- userVo1.setEmail(userVo.getEmail());
|
|
|
- userVo1.setSex(userVo.getSex());
|
|
|
+ driverVo = new SysUserVo();
|
|
|
+ driverVo.setUserId(userVo.getUserId());
|
|
|
+ driverVo.setUserName(userVo.getUserName());
|
|
|
+ driverVo.setNickName(userVo.getNickName());
|
|
|
+ driverVo.setPhonenumber(userVo.getPhonenumber());
|
|
|
+ driverVo.setEmail(userVo.getEmail());
|
|
|
+ driverVo.setSex(userVo.getSex());
|
|
|
if(userVo.getAvatar()!=null){
|
|
|
- userVo1.setAvatarUrl(ossService.selectUrlByIds(userVo.getAvatar().toString()));
|
|
|
+ driverVo.setAvatarUrl(ossService.selectUrlByIds(userVo.getAvatar().toString()));
|
|
|
}
|
|
|
- params.put("driverInfo",userVo1);
|
|
|
+ params.put("driverInfo",driverVo);
|
|
|
params.put("carInfo",carVo);
|
|
|
}
|
|
|
if(add.getPathId()!=null){
|
|
|
@@ -377,11 +393,78 @@ public class TblDzbcPathSchedulingServiceImpl implements ITblDzbcPathSchedulingS
|
|
|
add.setExt1(JSONUtil.toJsonStr(params));
|
|
|
baseMapper.updateById(add);
|
|
|
|
|
|
+ // 固定班次(type=2)修改后,同步更新对应的司机任务
|
|
|
+ if (bo.getType() != null && bo.getType() == 2) {
|
|
|
+ updateDriverTrip(add, driverVo, carVo);
|
|
|
+ }
|
|
|
+
|
|
|
SysCache();
|
|
|
}
|
|
|
return c> 0;
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 更新司机任务(排班修改时同步更新)
|
|
|
+ */
|
|
|
+ private void updateDriverTrip(TblDzbcPathScheduling scheduling, SysUserVo driver, TblDzbcCarVo carVo) {
|
|
|
+ try {
|
|
|
+ // 查找该排班关联的司机任务
|
|
|
+ TblDzbcDriverTrip trip = driverTripMapper.selectOne(
|
|
|
+ new LambdaQueryWrapper<TblDzbcDriverTrip>()
|
|
|
+ .apply("ext2->'$.schedulingId' = {0}", scheduling.getId())
|
|
|
+ .last("LIMIT 1")
|
|
|
+ );
|
|
|
+
|
|
|
+ if (trip == null) {
|
|
|
+ // 如果不存在司机任务,则创建一个新的
|
|
|
+ Map<String, Object> params = new HashMap<>();
|
|
|
+ params.put("driverInfo", driver);
|
|
|
+ params.put("carInfo", carVo);
|
|
|
+ createDriverTrip(scheduling, params);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 如果司机任务已发车或已完成,不允许修改
|
|
|
+ if (trip.getStatus() != null && trip.getStatus() >= 1) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新司机任务信息
|
|
|
+ TblDzbcDriverTrip updateTrip = new TblDzbcDriverTrip();
|
|
|
+ updateTrip.setId(trip.getId());
|
|
|
+ updateTrip.setPathId(scheduling.getPathId());
|
|
|
+
|
|
|
+ if (driver != null) {
|
|
|
+ updateTrip.setDriverId(driver.getUserId());
|
|
|
+ updateTrip.setDriverName(driver.getNickName());
|
|
|
+ updateTrip.setDriverPhone(driver.getPhonenumber());
|
|
|
+ }
|
|
|
+
|
|
|
+ if (carVo != null) {
|
|
|
+ updateTrip.setCarId(carVo.getId());
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新开始时间 (mdate + mtime)
|
|
|
+ if (scheduling.getMdate() != null && StrUtil.isNotBlank(scheduling.getMtime())) {
|
|
|
+ String dateStr = DateUtil.formatDate(scheduling.getMdate());
|
|
|
+ String timeStr = scheduling.getMtime();
|
|
|
+ if (StringUtils.countMatches(timeStr, ":") == 1) {
|
|
|
+ timeStr += ":00";
|
|
|
+ }
|
|
|
+ String dateTimeStr = dateStr + " " + timeStr;
|
|
|
+ LocalDateTime startTime = LocalDateTime.parse(dateTimeStr, DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
|
|
+ updateTrip.setStartTime(startTime);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新 ext1 存储排班快照
|
|
|
+ updateTrip.setExt1(JSONUtil.toJsonStr(scheduling));
|
|
|
+
|
|
|
+ driverTripMapper.updateById(updateTrip);
|
|
|
+ } catch (Exception e) {
|
|
|
+ e.printStackTrace();
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
|
|
|
@Override
|