Commit d8d1e287 authored by hanbing's avatar hanbing

方案管理-方案下发,时间表下发

parent 0f23fc8a
package net.wanji.web.controller;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import net.wanji.feign.pojo.result.JsonViewObject;
import net.wanji.web.dto.ScheduleIdDTO;
import net.wanji.web.service.impl.SchemeSendServiceImpl;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* @author duanruiming
* @date 2023/01/04 16:10
*/
@Api(value = "PlanSendController", description = "方案下发")
@RequestMapping("/planSend")
@RestController
@SuppressWarnings("all")
public class PlanSendController {
private final SchemeSendServiceImpl schemeSendService;
public PlanSendController(SchemeSendServiceImpl schemeSendService) {
this.schemeSendService = schemeSendService;
}
@ApiOperation(value = "方案下发", notes = "时间表下发")
@PostMapping("/scheduleSend")
public JsonViewObject timeTableSend(@RequestBody ScheduleIdDTO scheduleIdDTO) {
JsonViewObject jsonViewObject = schemeSendService.scheduleSend(scheduleIdDTO);
return jsonViewObject;
}
}
package net.wanji.web.dto;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 方案下发-时间表下发输入参数
*
* @author Kent HAN
* @date 2022/12/20 10:17
*/
@Data
public class ScheduleIdDTO {
@ApiModelProperty(value = "路口ID,如:c7e7b1f352dd4acab4a60088eb391cca", required = true)
private String crossId;
@ApiModelProperty(value = "运行计划ID", required = true)
private Integer scheduleId;
}
package net.wanji.web.service;
import net.wanji.feign.pojo.result.JsonViewObject;
import net.wanji.web.dto.ScheduleIdDTO;
/**
* @author Kent HAN
* @date 2022/11/3 16:14
*/
public interface SchemeSendService {
JsonViewObject scheduleSend(ScheduleIdDTO scheduleIdDTO);
}
package net.wanji.web.service.impl;
import net.wanji.feign.pojo.result.JsonViewObject;
import net.wanji.feign.pojo.vo.ScheduleSendVO;
import net.wanji.feign.service.UtcFeignClients;
import net.wanji.web.dto.ScheduleIdDTO;
import net.wanji.web.mapper.scheme.CrossPlanMapper;
import net.wanji.web.mapper.scheme.CrossSchedulesPlanMapper;
import net.wanji.web.po.scheme.CrossPlanPO;
import net.wanji.web.po.scheme.CrossSchedulesPlanPO;
import net.wanji.web.service.SchemeSendService;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Service;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @author Kent HAN
* @date 2023/2/1 9:39
*/
@Service
public class SchemeSendServiceImpl implements SchemeSendService {
private final UtcFeignClients utcFeignClients;
private final CrossSchedulesPlanMapper crossSchedulesPlanMapper;
private final CrossPlanMapper crossPlanMapper;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
public SchemeSendServiceImpl(@Qualifier("net.wanji.feign.service.UtcFeignClients") UtcFeignClients utcFeignClients, CrossSchedulesPlanMapper crossSchedulesPlanMapper, CrossPlanMapper crossPlanMapper) {
this.utcFeignClients = utcFeignClients;
this.crossSchedulesPlanMapper = crossSchedulesPlanMapper;
this.crossPlanMapper = crossPlanMapper;
}
@Override
public JsonViewObject scheduleSend(ScheduleIdDTO scheduleIdDTO) {
String crossId = scheduleIdDTO.getCrossId();
ScheduleSendVO scheduleSendVO = new ScheduleSendVO();
scheduleSendVO.setCrossCode(crossId);
// 构造时间表
List<ScheduleSendVO.Schedule> schedules = buildSchedules(crossId, scheduleIdDTO);
scheduleSendVO.setSchedules(schedules);
// 发送请求
JsonViewObject jsonViewObject = utcFeignClients.scheduleSend(scheduleSendVO);
if (Objects.isNull(jsonViewObject) || jsonViewObject.getCode() != 200) {
return jsonViewObject.fail("信号机方案下发-基础方案下发UTC服务调用异常");
}
return jsonViewObject.success();
}
private List<ScheduleSendVO.Schedule> buildSchedules(String crossId, ScheduleIdDTO scheduleIdDTO) {
List<ScheduleSendVO.Schedule> schedules = new ArrayList<>();
Integer scheduleId = scheduleIdDTO.getScheduleId();
List<CrossSchedulesPlanPO> crossSchedulesPlanPOList =
crossSchedulesPlanMapper.selectByCrossIdAndSchedulesId(crossId, scheduleId);
// 根据计划ID分组
Map<Integer, List<CrossSchedulesPlanPO>> collectMap = crossSchedulesPlanPOList.stream()
.collect(Collectors.groupingBy(CrossSchedulesPlanPO::getPlanId));
for (Map.Entry<Integer, List<CrossSchedulesPlanPO>> entry : collectMap.entrySet()) {
ScheduleSendVO.Schedule schedule = new ScheduleSendVO.Schedule();
List<ScheduleSendVO.Schedule.Week> weeks = new ArrayList<>();
List<ScheduleSendVO.Schedule.SpecialDay> specialDays = new ArrayList<>();
for (CrossSchedulesPlanPO crossSchedulesPlanPO : entry.getValue()) {
Integer week = crossSchedulesPlanPO.getWeek();
Date specialDate = crossSchedulesPlanPO.getSpecialDate();
if (week != 0) {
// 添加至星期列表
addToWeeks(weeks, week, entry);
} else {
// 添加至特殊日期列表
addToSpecialDays(specialDays, specialDate, entry);
}
}
schedule.setWeeks(weeks);
schedule.setSpecialDays(specialDays);
schedules.add(schedule);
}
return schedules;
}
private void addToSpecialDays(List<ScheduleSendVO.Schedule.SpecialDay> specialDays, Date specialDate,
Map.Entry<Integer, List<CrossSchedulesPlanPO>> entry) {
ScheduleSendVO.Schedule.SpecialDay specialDay = new ScheduleSendVO.Schedule.SpecialDay();
specialDay.setDateStr(sdf.format(specialDate));
String planNo = getPlanNo(entry);
specialDay.setPlanNo(Integer.parseInt(planNo));
specialDays.add(specialDay);
}
private void addToWeeks(List<ScheduleSendVO.Schedule.Week> weeks, Integer week,
Map.Entry<Integer, List<CrossSchedulesPlanPO>> entry) {
ScheduleSendVO.Schedule.Week weekObj = new ScheduleSendVO.Schedule.Week();
weekObj.setWeekNum(week);
String planNo = getPlanNo(entry);
weekObj.setPlanNo(Integer.parseInt(planNo));
weeks.add(weekObj);
}
private String getPlanNo(Map.Entry<Integer, List<CrossSchedulesPlanPO>> entry) {
Integer planId = entry.getKey();
CrossPlanPO crossPlanPO = crossPlanMapper.selectById(planId);
return crossPlanPO.getPlanNo();
}
}
......@@ -199,7 +199,13 @@ public class RunningPlanServiceImpl implements RunningPlanService {
for (RunningPlanDTO.DailyPlanListElement dailyPlan : dailyPlanList) {
// 更新计划表获取计划ID
CrossPlanPO crossPlanPO = new CrossPlanPO();
crossPlanPO.setPlanNo(dailyPlan.getPlanNo());
String planNo = dailyPlan.getPlanNo();
try {
Integer.parseInt(planNo);
} catch (Exception e) {
throw new RuntimeException("计划编号必须为数字");
}
crossPlanPO.setPlanNo(planNo);
crossPlanPO.setName(dailyPlan.getName());
crossPlanPO.setCrossId(crossId);
crossPlanMapper.insertOne(crossPlanPO);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment