Commit c5fc8780 authored by hanbing's avatar hanbing

信控模块全局日期处理

parent 13585937
package net.wanji.web.config;
import cn.hutool.core.date.DatePattern;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.Module;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer;
import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer;
import org.springframework.boot.autoconfigure.AutoConfigureBefore;
import org.springframework.boot.autoconfigure.jackson.JacksonAutoConfiguration;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.text.SimpleDateFormat;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.time.ZoneId;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
import java.util.TimeZone;
/**
* 全局日期处理
*
* @author Kent HAN
* @date 2023/1/12 21:49
*/
@Configuration
@AutoConfigureBefore(JacksonAutoConfiguration.class)
public class JacksonConfig {
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper()
.setLocale(Locale.CHINA)
.setTimeZone(TimeZone.getTimeZone(ZoneId.systemDefault()))
// 反序列化的格式
.registerModule(javaTimeModule())
// 序列化的格式
.setDateFormat(new SimpleDateFormat(DatePattern.NORM_DATETIME_PATTERN))
.setLocale(Locale.CHINA)
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.findAndRegisterModules();
}
@Bean
public Module javaTimeModule() {
JavaTimeModule module = new JavaTimeModule();
module.addSerializer(new LocalDateTimeSerializer(
DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)
));
module.addSerializer(new LocalTimeSerializer(
DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN))
);
module.addSerializer(new LocalDateSerializer(
DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN))
);
module.addDeserializer(LocalDateTime.class,
new LocalDateTimeDeserializer(
DateTimeFormatter.ofPattern(DatePattern.NORM_DATETIME_PATTERN)
));
module.addDeserializer(LocalDate.class,
new LocalDateDeserializer(
DateTimeFormatter.ofPattern(DatePattern.NORM_DATE_PATTERN)
));
module.addDeserializer(LocalTime.class,
new LocalTimeDeserializer(
DateTimeFormatter.ofPattern(DatePattern.NORM_TIME_PATTERN)
));
return module;
}
}
\ No newline at end of file
package net.wanji.web.controller;
import io.swagger.annotations.Api;
import net.wanji.web.vo.TestVO;
import org.springframework.web.bind.annotation.GetMapping;
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;
import java.util.Date;
/**
* @author Kent HAN
* @date 2023/1/12 21:38
*/
@RestController
@Api(value = "测试", description = "测试", tags = "测试")
@RequestMapping("/test")
public class TestController {
@PostMapping("/date")
public void testDate(@RequestBody TestVO testVO) {
Date testDate = testVO.getTestDate();
System.out.println(testDate);
}
@GetMapping("/getDate")
public Date getDate() {
Date date = new Date();
return date;
}
}
...@@ -21,4 +21,6 @@ public interface CrossPhaseLightsMapper { ...@@ -21,4 +21,6 @@ public interface CrossPhaseLightsMapper {
List<CrossPhaseLightsPO> selectByPhaseId(@Param("phaseId") Integer phaseId); List<CrossPhaseLightsPO> selectByPhaseId(@Param("phaseId") Integer phaseId);
List<CrossPhaseLightsPO> selectByLightsId(@Param("lightsId") Integer lightsId); List<CrossPhaseLightsPO> selectByLightsId(@Param("lightsId") Integer lightsId);
void updateLightsId(@Param("oldId") Integer oldId, @Param("newId") Integer newId);
} }
...@@ -37,4 +37,7 @@ public interface CrossPhaseMapper { ...@@ -37,4 +37,7 @@ public interface CrossPhaseMapper {
@Param("groupNumber") Integer groupNumber); @Param("groupNumber") Integer groupNumber);
List<CrossPhasePO> selectByIds(@Param("ids") List<Integer> ids); List<CrossPhasePO> selectByIds(@Param("ids") List<Integer> ids);
List<CrossPhasePO> selectByCrossIdAndSchemeId(@Param("crossId") String crossId,
@Param("schemeId") Integer schemeId);
} }
...@@ -27,6 +27,7 @@ import java.util.HashMap; ...@@ -27,6 +27,7 @@ import java.util.HashMap;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
...@@ -154,6 +155,15 @@ public class CrossConfigServiceImpl implements CrossConfigService { ...@@ -154,6 +155,15 @@ public class CrossConfigServiceImpl implements CrossConfigService {
private void handleLightsData(SaveLaneInfoDTO saveLaneInfoDTO, List<LedConfigListElement> ledConfigList, private void handleLightsData(SaveLaneInfoDTO saveLaneInfoDTO, List<LedConfigListElement> ledConfigList,
Set<String> lightCodeSet) { Set<String> lightCodeSet) {
// 保存旧的灯组代码-灯组对象映射关系
Map<String, CrossLightsPO> oldLightsMap = new HashMap<>();
List<CrossLightsPO> oldPOList = crossLightsMapper.selectByCrossId(saveLaneInfoDTO.getCrossId());
if (oldPOList != null) {
for (CrossLightsPO oldPO : oldPOList) {
oldLightsMap.put(oldPO.getLightsNo(), oldPO);
}
}
String crossId = saveLaneInfoDTO.getCrossId(); String crossId = saveLaneInfoDTO.getCrossId();
List<CrossLightsPO> crossLightsPOList = new ArrayList<>(); List<CrossLightsPO> crossLightsPOList = new ArrayList<>();
for (LedConfigListElement ledConfigListElement : ledConfigList) { for (LedConfigListElement ledConfigListElement : ledConfigList) {
...@@ -181,6 +191,22 @@ public class CrossConfigServiceImpl implements CrossConfigService { ...@@ -181,6 +191,22 @@ public class CrossConfigServiceImpl implements CrossConfigService {
} }
crossLightsMapper.deleteByCrossId(crossId); crossLightsMapper.deleteByCrossId(crossId);
crossLightsMapper.insertBatch(crossLightsPOList); crossLightsMapper.insertBatch(crossLightsPOList);
// 对比旧的灯组信息,如没有发生变化,则更新灯组-相位关系表中的灯组ID
for (CrossLightsPO newPO : crossLightsPOList) {
String newNumber = newPO.getLightsNo();
CrossLightsPO oldPO = oldLightsMap.get(newNumber);
if (oldPO != null) {
if (checkIsSame(oldPO, newPO)) {
crossPhaseLightsMapper.updateLightsId(oldPO.getId(), newPO.getId());
}
}
}
}
private boolean checkIsSame(CrossLightsPO oldPO, CrossLightsPO newPO) {
return (Objects.equals(oldPO.getDir(), newPO.getDir())
&& Objects.equals(oldPO.getType(), newPO.getType()));
} }
private static void setType(LedConfigListElement ledConfigListElement, CrossLightsPO crossLightsPO) { private static void setType(LedConfigListElement ledConfigListElement, CrossLightsPO crossLightsPO) {
......
package net.wanji.web.service.scheme.impl; package net.wanji.web.service.scheme.impl;
import net.wanji.web.common.constant.ControlModeConst; import net.wanji.web.common.constant.ControlModeConst;
import net.wanji.web.common.exception.LightsModifyException;
import net.wanji.web.common.exception.PhaseNoNotUniqueException; import net.wanji.web.common.exception.PhaseNoNotUniqueException;
import net.wanji.web.dto.CrossIdDTO; import net.wanji.web.dto.CrossIdDTO;
import net.wanji.web.dto.LaneIdDTO; import net.wanji.web.dto.LaneIdDTO;
...@@ -147,13 +146,32 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -147,13 +146,32 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
List<SaveSchemeConfigDTO.RingListElement> ringList = buildRingList(crossId, schemeId); List<SaveSchemeConfigDTO.RingListElement> ringList = buildRingList(crossId, schemeId);
phaseScheme.setRingList(ringList); phaseScheme.setRingList(ringList);
// 构造特殊控制列表 // 构造特殊控制列表
// phaseScheme.setSpecialControlModeList(); List<SaveSchemeConfigDTO.PhaseListElement> specialControlList = buildSpecialControlList(crossId, schemeId);
phaseScheme.setSpecialControlModeList(specialControlList);
phaseSchemeList.add(phaseScheme); phaseSchemeList.add(phaseScheme);
} }
return phaseSchemeList; return phaseSchemeList;
} }
/**
* 构造特殊控制列表
*
* @author Kent HAN
* @date 2023/1/12 17:53
* @param crossId
* @param schemeId
* @return java.util.List<net.wanji.web.dto.SaveSchemeConfigDTO.PhaseListElement>
*/
private List<SaveSchemeConfigDTO.PhaseListElement> buildSpecialControlList(String crossId, Integer schemeId) {
// List<CrossPhasePO> crossPhasePOList = crossPhaseMapper.selectByCrossIdAndSchemeId(crossId, schemeId);
// for (CrossPhasePO crossPhasePO : crossPhasePOList) {
// Integer controlMode = crossPhasePO.getControlMode();
// if (controlMode == )
// }
return null;
}
/** /**
* 构造环列表 * 构造环列表
* *
...@@ -282,12 +300,11 @@ public class SchemeConfigServiceImpl implements SchemeConfigService { ...@@ -282,12 +300,11 @@ public class SchemeConfigServiceImpl implements SchemeConfigService {
for (CrossPhaseLightsPO crossPhaseLightsPO : crossPhaseLightsPOList) { for (CrossPhaseLightsPO crossPhaseLightsPO : crossPhaseLightsPOList) {
Integer lightsId = crossPhaseLightsPO.getLightsId(); Integer lightsId = crossPhaseLightsPO.getLightsId();
CrossLightsPO crossLightsPO = crossLightsMapper.selectById(lightsId); CrossLightsPO crossLightsPO = crossLightsMapper.selectById(lightsId);
if (crossLightsPO == null) { if (crossLightsPO != null) {
throw new LightsModifyException("灯组配置已修改,需重新配置方案");
}
Integer dir = crossLightsPO.getDir(); Integer dir = crossLightsPO.getDir();
dirSet.add(dir); dirSet.add(dir);
} }
}
for (Integer dir : dirSet) { for (Integer dir : dirSet) {
SaveSchemeConfigDTO.DirListElement dirListElement = new SaveSchemeConfigDTO.DirListElement(); SaveSchemeConfigDTO.DirListElement dirListElement = new SaveSchemeConfigDTO.DirListElement();
dirListElement.setDir(dir); dirListElement.setDir(dir);
......
package net.wanji.web.vo;
import lombok.Data;
import java.util.Date;
/**
* @author Kent HAN
* @date 2023/1/12 21:45
*/
@Data
public class TestVO {
private Date testDate;
}
...@@ -20,6 +20,12 @@ ...@@ -20,6 +20,12 @@
</foreach> </foreach>
</insert> </insert>
<update id="updateLightsId">
update t_base_cross_phase_lights
set lights_id = #{newId}
where lights_id = #{oldId}
</update>
<delete id="deleteByCrossId"> <delete id="deleteByCrossId">
delete from t_base_cross_phase_lights delete from t_base_cross_phase_lights
where cross_id = #{crossId} where cross_id = #{crossId}
......
...@@ -80,5 +80,13 @@ ...@@ -80,5 +80,13 @@
</foreach> </foreach>
</select> </select>
<select id="selectByCrossIdAndSchemeId" resultMap="BaseResultMap">
select
id,phase_no,name,sort,cross_id,plan_id,ring_no,group_no,phase_type,control_mode,phase_time,green_time,green_flash_time,yellow_flash_time,red_flash_time,ped_flash_time,yellow_time,red_time,min_green_time,max_green_time,gmt_create,gmt_modified
from t_base_cross_phase
where cross_id = #{crossId} and plan_id = #{schemeId}
order by sort
</select>
</mapper> </mapper>
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