LsSectionRouteServiceImpl.java
5.17 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
package com.bsth.service.impl;
import com.bsth.entity.*;
import com.bsth.entity.search.CustomerSpecs;
import com.bsth.repository.*;
import com.bsth.service.LsSectionRouteService;
import com.bsth.util.CoordinateConverter;
import com.bsth.util.CustomBeanUtils;
import com.bsth.util.GeoConverter;
import org.geolatte.geom.Point;
import org.geolatte.geom.Polygon;
import org.geolatte.geom.codec.Wkt;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author Hill
*/
@Service
public class LsSectionRouteServiceImpl extends BaseServiceImpl<LsSectionRoute, Integer> implements LsSectionRouteService {
@Autowired
private LsSectionRouteRepository lsSectionRouteRepository;
@Autowired
private SectionRouteRepository sectionRouteRepository;
@Autowired
private LineVersionsRepository lineVersionsRepository;
@Autowired
private LineRepository lineRepository;
@Autowired
private SectionRepository sectionRepository;
/**
* 获取历史路段路由
* @param map
* @return
*/
public List<LsSectionRoute> findSectionRoutes(Map<String, Object> map) {
return lsSectionRouteRepository.findAll(new CustomerSpecs<>(map), Sort.by(Sort.Direction.ASC, "directions", "sectionrouteCode"));
}
/**
* 批量撤销路段路由
* @param ids
*/
@Override
@Transactional(rollbackFor = RuntimeException.class)
public void batchDestroy(List<Integer> ids) {
LsSectionRoute lsSectionRoute = lsSectionRouteRepository.findById(ids.get(0)).get();
Integer currentVersion = lineVersionsRepository.findCurrentVersion(lsSectionRoute.getLine().getId());
if (lsSectionRoute.getVersions() < currentVersion) {
throw new IllegalArgumentException("历史版本不可变更");
}
lsSectionRouteRepository.batchDestroy(ids);
if (lsSectionRoute.getVersions().equals(currentVersion)) {
refreshCurrent(lsSectionRoute.getLine().getId(), currentVersion);
}
}
/**
* 批量恢复撤销路段路由
* @param ids
*/
@Override
@Transactional(rollbackFor = RuntimeException.class)
public void batchRecover(List<Integer> ids) {
LsSectionRoute lsSectionRoute = lsSectionRouteRepository.findById(ids.get(0)).get();
Integer currentVersion = lineVersionsRepository.findCurrentVersion(lsSectionRoute.getLine().getId());
if (lsSectionRoute.getVersions() < currentVersion) {
throw new IllegalArgumentException("历史版本不可变更");
}
lsSectionRouteRepository.batchRecover(ids);
if (lsSectionRoute.getVersions().equals(currentVersion)) {
refreshCurrent(lsSectionRoute.getLine().getId(), currentVersion);
}
}
@Override
@Transactional(rollbackFor = RuntimeException.class)
public Map<String, Object> quoteOtherSide(int lineId, int version, int direction, int otherDirection) {
Integer currentVersion = lineVersionsRepository.findCurrentVersion(lineId);
if (version < currentVersion) {
throw new IllegalArgumentException("历史版本不可变更");
}
lsSectionRouteRepository.quoteOtherSide(lineId, version, direction, otherDirection);
if (Integer.valueOf(version).equals(currentVersion)) {
refreshCurrent(lineId, currentVersion);
}
return new HashMap<>(0);
}
@Transactional(rollbackFor = RuntimeException.class)
@Override
public void add(LsSectionRoute sectionRoute) {
Section section = sectionRoute.getSection();
Line line = lineRepository.findById(sectionRoute.getLine().getId()).get();
Integer version = lineVersionsRepository.findCurrentVersion(line.getId());
boolean isPresent = sectionRepository.findById(section.getId()).isPresent();
sectionRoute.setLineCode(line.getLineCode());
if (sectionRoute.getVersions() < version) {
throw new IllegalArgumentException("历史版本不可变更");
}
// 路段坐标信息
if (!isPresent) {
SectionServiceImpl.centerLine(section);
}
lsSectionRouteRepository.updateSectiouRouteCode(sectionRoute);
if (!isPresent) {
sectionRepository.save(section);
}
sectionRoute.setCreateDate(new Date());
sectionRoute.setUpdateDate(new Date());
lsSectionRouteRepository.save(sectionRoute);
if (sectionRoute.getVersions().equals(version)) {
refreshCurrent(line.getId(), version);
}
}
@Transactional(rollbackFor = RuntimeException.class)
@Override
public void modify(LsSectionRoute sectionRoute) {
LsSectionRoute sectionRoute1 = lsSectionRouteRepository.findById(sectionRoute.getId()).get();
Integer version = lineVersionsRepository.findCurrentVersion(sectionRoute1.getLine().getId());
if (sectionRoute1.getVersions() < version) {
throw new IllegalArgumentException("历史版本不可变更");
}
lsSectionRouteRepository.updateSectiouRouteCode(sectionRoute);
CustomBeanUtils.copyPropertiesIgnoredNull(sectionRoute, sectionRoute1);
lsSectionRouteRepository.save(sectionRoute1);
if (sectionRoute.getVersions().equals(version)) {
refreshCurrent(sectionRoute1.getLine().getId(), version);
}
}
protected void refreshCurrent(int lineId, int version) {
sectionRouteRepository.deleteByLine(lineId);
sectionRouteRepository.updateFromHistory(lineId, version);
}
}