LineVersionsServiceImpl.java 10.5 KB
package com.bsth.service.impl;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.bsth.common.ResponseCode;
import com.bsth.entity.Line;
import com.bsth.entity.LineVersions;
import com.bsth.entity.LsSectionRoute;
import com.bsth.entity.LsStationRoute;
import com.bsth.entity.SectionRoute;
import com.bsth.entity.StationRoute;
import com.bsth.repository.LineRepository;
import com.bsth.repository.LineVersionsRepository;
import com.bsth.repository.LsSectionRouteRepository;
import com.bsth.repository.LsStationRouteRepository;
import com.bsth.service.LineVersionsService;
import com.bsth.service.SectionRouteService;
import com.bsth.service.StationRouteService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 
 * @ClassName: LineVersionsServiceImpl(线路service业务层实现类)
 * 
 * @Extends : BaseService
 * 
 * @Description: TODO(线路service业务层)
 * 
 * @Author bsth@lq
 *
 * @Version 公交调度系统BS版 0.1
 * 
 */

@Service
public class LineVersionsServiceImpl extends BaseServiceImpl<LineVersions, Integer> implements LineVersionsService{
	
	@Autowired
	private LineVersionsRepository repository;
	
	@Autowired
	LineRepository lineRepository;
	
	@Autowired
    SectionRouteService sectionRouteService;
    
    @Autowired
    StationRouteService stationRouteService;
    
    @Autowired
    com.bsth.repository.SectionRouteRepository  sectionRouteRepository ;
    
    @Autowired
    com.bsth.repository.StationRouteRepository  stationRouteRepository ;
    
    @Autowired
    LsSectionRouteRepository  lsSectionRouteRepository ;
    
    @Autowired
    LsStationRouteRepository  lsStationRouteRepository ;
	
	@Override
	public List<LineVersions> findByLineCode(int lineId) {
		return repository.findBylineId(lineId);
	}

	@Override
	public Map<String, Object> update(Map<String, Object> map) {
		Map<String, Object> resultMap = new HashMap<>();
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		try {
			Date startDate = simpleDateFormat.parse(map.get("startDate").toString());
			Date endDate = simpleDateFormat.parse(map.get("endDate").toString());
			Integer id = Integer.valueOf(map.get("Id").toString());
			Integer lineid = Integer.valueOf(map.get("lineId").toString());
			String lineCode = map.get("lineCode").toString();
			Integer versions = Integer.valueOf(map.get("versions").toString());
			Integer status = Integer.valueOf(map.get("status").toString());
			String name = map.get("name").toString();
			String remark = map.get("remark").toString();

			Line line = lineRepository.findOne(lineid);
			
			int statu = repository.update(id,line,lineCode,new java.sql.Date(startDate.getTime()),
					new java.sql.Date(endDate.getTime()),versions,status,remark,name);
			LineVersions upLineVersions = repository.findBylineIdAndVersions(line.getId(),versions);
			if(upLineVersions != null){
				upLineVersions.setEndDate(new java.sql.Date(startDate.getTime()));
				repository.save(upLineVersions);
			}
			if (statu==1) {
				resultMap.put("status", ResponseCode.SUCCESS);
			} else {
				resultMap.put("status", ResponseCode.ERROR);
			}
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			resultMap.put("status", ResponseCode.ERROR);
		}
		return resultMap;
	}

	@Override
	public List<LineVersions> findupdated() {
		return repository.findupdated();
	}
	
	@Autowired
	JdbcTemplate jdbcTemplate;
	
	// 线路更新
	@Transactional
	@Override
	public List<LineVersions> lineUpdate() {
		List<LineVersions> list = findupdated();
    	for (LineVersions lineVersions : list) {
    		Integer lineId = lineVersions.getLine().getId();
    		String lineCode = lineVersions.getLineCode();
    		Integer versions = lineVersions.getVersions();
    		// 需要更新线路的路由
    		List<LsSectionRoute> lsSectionRoutes = lsSectionRouteRepository.findupdated(lineId, lineCode, versions);
    		List<LsStationRoute> lsStationRoutes = lsStationRouteRepository.findupdated(lineId, lineCode, versions);
    		if (lsSectionRoutes.size() != 0 && lsStationRoutes.size() != 0) {
    			// 更新
    			final List<SectionRoute> sectionRoutes = JSONArray.parseArray(JSON.toJSONString(lsSectionRoutes), SectionRoute.class);
    			final List<StationRoute> stationRoutes = JSONArray.parseArray(JSON.toJSONString(lsStationRoutes), StationRoute.class);
    			//sectionRouteService.batchUpdate(lineId, lineCode);
    			//sectionRouteRepository.batchDelete(lineId, lineCode);
    			
    			jdbcTemplate.update("delete from bsth_c_stationroute where line = ?  and line_code = ?", lineId, lineCode);
    			
    			String stationSql ="insert into bsth_c_stationroute(id,line,station,station_name,station_route_code,"
    					+ "line_code,station_code,station_mark,directions,distances,to_time,destroy,versions,"
    					+ "create_date,update_date) values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
    			jdbcTemplate.batchUpdate(stationSql, new BatchPreparedStatementSetter() {
					
					@Override
					public void setValues(PreparedStatement ps, int i) throws SQLException {
						StationRoute sRoute = stationRoutes.get(i);
						sRoute.getStationRouteCode();
						ps.setInt(1, sRoute.getId());
						ps.setInt(2, sRoute.getLine().getId());
						ps.setInt(3, sRoute.getStation().getId());
						ps.setString(4, sRoute.getStationName());
						ps.setInt(5, sRoute.getStationRouteCode());
						ps.setString(6, sRoute.getLineCode());
						ps.setString(7, sRoute.getStationCode());
						ps.setString(8, sRoute.getStationMark());
						ps.setInt(9, sRoute.getDirections());
						ps.setDouble(10, sRoute.getDistances());
						ps.setDouble(11, sRoute.getToTime());
						ps.setInt(12, sRoute.getDestroy());
						ps.setInt(13, sRoute.getVersions());
						ps.setDate(14, new java.sql.Date(sRoute.getCreateDate().getTime()));
						ps.setDate(15, new java.sql.Date(sRoute.getUpdateDate().getTime()));						
					}
					
					@Override
					public int getBatchSize() {
						// TODO Auto-generated method stub
						return stationRoutes.size();
					}
				} );
    			jdbcTemplate.update("delete from bsth_c_sectionroute where line = ?  and line_code = ?", lineId, lineCode);
    			
    			String sectionSql ="insert into bsth_c_sectionroute(id,line_code,section_code,sectionroute_code,"
    					+ "directions,line,section,create_date,update_date,versions,"
    					+ "destroy) values(?,?,?,?,?,?,?,?,?,?,?)";
    			jdbcTemplate.batchUpdate(sectionSql, new BatchPreparedStatementSetter() {
					
					@Override
					public void setValues(PreparedStatement ps, int i) throws SQLException {
						SectionRoute sRoute = sectionRoutes.get(i);
						ps.setInt(1, sRoute.getId());
						ps.setString(2, sRoute.getLineCode());
						ps.setString(3, sRoute.getSectionCode());
						ps.setInt(4, sRoute.getSectionrouteCode());
						ps.setInt(5, sRoute.getDirections());
						ps.setInt(6, sRoute.getLine().getId());
						ps.setInt(7, sRoute.getSection().getId());
						ps.setDate(8, new java.sql.Date(sRoute.getCreateDate().getTime()));
						ps.setDate(9, new java.sql.Date(sRoute.getUpdateDate().getTime()));
						ps.setInt(10, sRoute.getVersions());
						ps.setInt(11, sRoute.getDestroy());
					}
					
					@Override
					public int getBatchSize() {
						// TODO Auto-generated method stub
						return sectionRoutes.size();
					}
				} );
    			// 更新线路版本
    			repository.updateOdlVersions(lineId, lineCode);
    			repository.updateNewVersions(lineId,lineCode,versions);
    			// 记录版本更新日志
                jdbcTemplate.update("INSERT into bsth_c_line_versions_enablog(line_code,`line_versions`,`t`) VALUES (?,?,?)",lineCode,versions, lineVersions.getStartDate().getTime());
			}
		}
    	return list;
	}

	/**
	 * 查询线路版本最大值
	 */
	@Override
	public LineVersions findLineVersionsMax(int lineId) {
		return repository.findLineVersionsMax(lineId);
	}

	/**
	 * 线路版本添加
	 */
	@Override
	public Map<String, Object> add(Map<String, Object> map) {
		SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Map<String, Object> resultMap = new HashMap<>();
		
		LineVersions lineVersions = new LineVersions();
		try {
			Date startDate = simpleDateFormat.parse(map.get("startDate").toString());
			Date endDate = simpleDateFormat.parse(map.get("endDate").toString());
			Line line = lineRepository.findOne(Integer.valueOf(map.get("lineId").toString())); 
			Integer versions = Integer.valueOf(map.get("versions").toString());
			lineVersions.setName(map.get("name").toString());
			lineVersions.setLine(line);
			lineVersions.setLineCode(map.get("lineCode").toString());
			lineVersions.setStartDate(new java.sql.Date(startDate.getTime()));
			lineVersions.setEndDate(new java.sql.Date(endDate.getTime()));
			lineVersions.setVersions(versions);
			// 添加的线路版本默认为待更新的
			lineVersions.setStatus(2);
			lineVersions.setRemark(map.get("remark").toString());
			repository.save(lineVersions);
			// 更新上一版本时间
			LineVersions upLineVersions = repository.findBylineIdAndVersions(line.getId(),versions);
			upLineVersions.setEndDate(new java.sql.Date(startDate.getTime()));
			repository.save(upLineVersions);
			resultMap.put("status", ResponseCode.SUCCESS);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			resultMap.put("status", ResponseCode.ERROR);
		}
		return resultMap;
	}

	/**
	 * 获取当前线路版本号
	 */
	@Override
	public Integer findCurrentVersion(int lineId) {
		return repository.findCurrentVersion(lineId);
	}

	@Override
	public Map<String, Object> issueVersion(int id) {
		Map<String, Object> resultMap = new HashMap<>();
		
			int statu = repository.issueVersion(id);
			if (statu == 1) 
				resultMap.put("status", ResponseCode.SUCCESS);
			else 
				resultMap.put("status", ResponseCode.ERROR);
		return resultMap;
	}
}