LsSectionRouteServiceImpl.java 5.17 KB
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);
	}
}