LsStationRouteServiceImpl.java
5.81 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
package com.bsth.service.impl;
import com.bsth.entity.Line;
import com.bsth.entity.LsStationRoute;
import com.bsth.entity.Station;
import com.bsth.entity.search.CustomerSpecs;
import com.bsth.repository.*;
import com.bsth.service.LsStationRouteService;
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.*;
/**
* @author Hill
*/
@Service
public class LsStationRouteServiceImpl extends BaseServiceImpl<LsStationRoute, Integer> implements LsStationRouteService {
@Autowired
private LsStationRouteRepository lsStationRouteRepository;
@Autowired
private StationRouteRepository stationRouteRepository;
@Autowired
private StationRepository stationRepository;
@Autowired
private LineRepository lineRepository;
@Autowired
private LineVersionsRepository lineVersionsRepository;
@Override
public Iterable<LsStationRoute> findAllByParams(Map<String, Object> map) {
List<Sort.Order> orders = new ArrayList<>();
orders.add(new Sort.Order(Sort.Direction.ASC, "directions"));
orders.add(new Sort.Order(Sort.Direction.ASC, "stationRouteCode"));
return lsStationRouteRepository.findAll(new CustomerSpecs<>(map), Sort.by(orders));
}
/**
* 批量撤销站点路由
* @param ids
*/
@Transactional(rollbackFor = RuntimeException.class)
@Override
public void batchDestroy(List<Integer> ids) {
if (ids.size() > 0) {
Integer id = ids.get(0);
LsStationRoute stationRoute = lsStationRouteRepository.findById(id).get();
Integer lineId = stationRoute.getLine().getId();
Integer versions = lineVersionsRepository.findCurrentVersion(lineId);
if (stationRoute.getVersions() < versions) {
throw new IllegalArgumentException("历史版本不可变更");
}
lsStationRouteRepository.batchDestroy(ids);
remark(stationRoute);
if (stationRoute.getVersions().equals(versions)) {
stationRouteRepository.deleteByLineAndVersion(lineId, versions);
stationRouteRepository.updateFromHistory(lineId, versions);
}
}
}
@Transactional
@Override
public Map<String, Object> add(LsStationRoute stationRoute) {
Station station = stationRoute.getStation();
Line line = lineRepository.findById(stationRoute.getLine().getId()).get();
Integer versions = lineVersionsRepository.findCurrentVersion(line.getId());
boolean isPresent = stationRepository.findById(station.getId()).isPresent();
stationRoute.setLineCode(line.getLineCode());
if (stationRoute.getVersions() < versions) {
throw new IllegalArgumentException("历史版本不可变更");
}
// 中心点坐标信息
if (!isPresent) {
String centerPoint = station.getCenterPointWkt();
CoordinateConverter.Location bd = CoordinateConverter.LocationMake(centerPoint);
CoordinateConverter.Location wgs = CoordinateConverter.transformFromBDToWGS(bd);
Point baiduPoint = (Point) Wkt.fromWkt(bd.toWkt());
Point wgsPoint = (Point) Wkt.fromWkt(wgs.toWkt());
station.setCenterPoint(baiduPoint);
station.setCenterPointWgs(wgsPoint);
}
// 多边形缓冲区
if ("d".equals(stationRoute.getShapedType())) {
String wkt = stationRoute.getBufferPolygonWkt();
stationRoute.setBufferPolygon((Polygon) Wkt.fromWkt(wkt));
stationRoute.setBufferPolygonWgs(GeoConverter.polygonBd2wgs(wkt));
}
lsStationRouteRepository.updateStatiouRouteCode(stationRoute);
if (!isPresent) {
stationRepository.save(station);
}
lsStationRouteRepository.save(stationRoute);
remark(stationRoute);
if (stationRoute.getVersions().equals(versions)) {
stationRouteRepository.deleteByLineAndVersion(line.getId(), versions);
stationRouteRepository.updateFromHistory(line.getId(), versions);
}
return new HashMap<>();
}
@Transactional
@Override
public Map<String, Object> modify(LsStationRoute stationRoute) {
LsStationRoute stationRoute1 = lsStationRouteRepository.findById(stationRoute.getId()).get();
Integer versions = lineVersionsRepository.findCurrentVersion(stationRoute1.getLine().getId());
// 多边形缓冲区
if ("d".equals(stationRoute.getShapedType())) {
String wkt = stationRoute.getBufferPolygonWkt();
stationRoute.setBufferPolygon((Polygon) Wkt.fromWkt(wkt));
stationRoute.setBufferPolygonWgs(GeoConverter.polygonBd2wgs(wkt));
}
lsStationRouteRepository.updateStatiouRouteCode(stationRoute);
CustomBeanUtils.copyPropertiesIgnoredNull(stationRoute, stationRoute1);
lsStationRouteRepository.save(stationRoute1);
remark(stationRoute1);
if (stationRoute.getVersions().equals(versions)) {
stationRouteRepository.deleteByLineAndVersion(stationRoute1.getLine().getId(), versions);
stationRouteRepository.updateFromHistory(stationRoute1.getLine().getId(), versions);
}
return new HashMap<>();
}
public void remark(LsStationRoute stationRoute) {
lsStationRouteRepository.updateStartZ(stationRoute);
lsStationRouteRepository.updateStartB(stationRoute);
lsStationRouteRepository.updateStartE(stationRoute);
}
}