CalcMixServiceImpl.java 10.7 KB
package com.bsth.service.calc.impl;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.bsth.data.BasicData;
import com.bsth.entity.calc.CalcWaybill;
import com.bsth.entity.mcy_forms.Singledata;
import com.bsth.repository.calc.CalcWaybillRepository;
import com.bsth.service.calc.CalcMixService;
import com.bsth.util.Arith;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.stereotype.Service;

/**
 * Created by 19/02/28.
 */
@Service
public class CalcMixServiceImpl implements CalcMixService {
	
	@Autowired
	private CalcWaybillRepository calcRepository;

	@Autowired
	JdbcTemplate jdbcTemplate;


	Logger logger = LoggerFactory.getLogger(this.getClass());
    

	@Override
	public List<Map<String, Object>> calcjsyspy(String line, String date, String date2,
			String empnames, String cont, String gsdm, String fgsdm) {
		
		List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
		List<CalcWaybill> list = null;
		
		int flag = 0;
		if("驾驶员".equals(empnames)){
			flag = 1;
			list = calcRepository.scheduleByJsy(line, date, date2, gsdm, fgsdm, cont);
		} else if("售票员".equals(empnames)){
			flag = 2;
			list = calcRepository.scheduleBySpy(line, date, date2, gsdm, fgsdm, cont);
		} else if("车辆自编号".equals(empnames)){
			flag = 3;
			list = calcRepository.scheduleByZbh(line, date, date2, gsdm, fgsdm, cont);
		}
		
		List<CalcWaybill> calcList = new ArrayList<CalcWaybill>();
		Map<String, CalcWaybill> calcMap = new HashMap<String, CalcWaybill>();
		
		CalcWaybill zjCalc = this.initCalcWaybill();
		zjCalc.setjName("合计");
		for(CalcWaybill c : list){
			String key = "";
			if(flag == 1){
				if(c.getjGh() != null && c.getjName() != null)
					key = c.getjGh() + "/" + c.getjName();
			} else if(flag == 2){
				if(c.getsGh() != null && c.getsName() != null)
					key = c.getsGh() + "/" + c.getsName();
			} else if(flag == 3){
				if(c.getCl() != null)
				key = c.getCl();
			}
			
			if(key.trim().length() == 0 || "/".equals(key))
				continue;
			
			CalcWaybill calc = null;
			if(calcMap.containsKey(key)){
				calc = calcMap.get(key);
			} else {
				calc = this.initCalcWaybill();
				calc.setjName(key);
				calcList.add(calc);
				calcMap.put(key, calc);
			}
			
			this.summation(calc, c);
			
			this.summation(zjCalc, c);
			
		}
		calcList.add(zjCalc);
		calcMap.put("合计", zjCalc);
		
		for(CalcWaybill c : calcList){
			Map<String, Object> m = new HashMap<String, Object>();
			m.put("jName", c.getjName());
			m.put("jhyybc", c.getJhyybc());
			m.put("jhfyybc", c.getJhfyybc());
			m.put("sjyybc", c.getSjyybc());
			m.put("sjfyybc", c.getSjfyybc());
			m.put("lbbc", c.getLbbc());
			m.put("ljbc", c.getLjbc());
			m.put("jhzlc", Arith.add(c.getJhyylc(), c.getJhfyylc()));
			m.put("jhyylc", c.getJhyylc());
			m.put("jhfyylc", c.getJhfyylc());
			m.put("sjzlc", Arith.add(c.getSjyylc(), c.getSjfyylc()));
			m.put("sjyylc", c.getSjyylc());
			m.put("sjfyylc", c.getSjfyylc());
			m.put("lblc", c.getLblc());
			m.put("ljyylc", c.getLjyylc());
			m.put("ljfyylc", c.getLjfyylc());
			resList.add(m);
		}
		
		return resList;
	}
	
	public CalcWaybill initCalcWaybill(){
		CalcWaybill calc = new CalcWaybill();
		calc.setJhyybc(0);
		calc.setJhyylc(0d);
		calc.setJhfyybc(0);
		calc.setJhfyylc(0d);
		calc.setSjyybc(0);
		calc.setSjyylc(0d);
		calc.setSjfyybc(0);
		calc.setSjfyylc(0d);
		calc.setLbbc(0);
		calc.setLblc(0d);
		calc.setLjbc(0);
		calc.setLjyylc(0d);
		calc.setLjfyylc(0d);
		return calc;
	}

	public CalcWaybill summation(CalcWaybill c1, CalcWaybill c2){
		c1.setJhyybc(c1.getJhyybc() + c2.getJhyybc());
		c1.setJhyylc(Arith.add(c1.getJhyylc(), c2.getJhyylc()));
		c1.setJhfyybc(c1.getJhfyybc() + c2.getJhfyybc());
		c1.setJhfyylc(Arith.add(c1.getJhfyylc(), c2.getJhfyylc()));
		c1.setSjyybc(c1.getSjyybc() + c2.getSjyybc());
		c1.setSjyylc(Arith.add(c1.getSjyylc(), c2.getSjyylc()));
		c1.setSjyylc(Arith.add(c1.getSjyylc(), c2.getLjyylc()));
		c1.setSjfyybc(c1.getSjfyybc() + c2.getSjfyybc());
		c1.setSjfyylc(Arith.add(c1.getSjfyylc(), c2.getSjfyylc()));
		c1.setSjfyylc(Arith.add(c1.getSjfyylc(), c2.getLjfyylc()));
		c1.setLbbc(c1.getLbbc() + c2.getLbbc());
		c1.setLblc(Arith.add(c1.getLblc(), c2.getLblc()));
		c1.setLjbc(c1.getLjbc() + c2.getLjbc());
		c1.setLjyylc(Arith.add(c1.getLjyylc(), c2.getLjyylc()));
		c1.setLjfyylc(Arith.add(c1.getLjfyylc(), c2.getLjfyylc()));
		return c1;
	}

	@Override
	public List<Map<String, Object>> singledatatj(String line,
			String date, String date2,
			String tjtype, String cont,
			String gsdm, String fgsdm) {
		
		List<Map<String, Object>> resList = new ArrayList<Map<String, Object>>();
		List<CalcWaybill> list = null;
		
		int flag = 0;
		if("驾驶员".equals(tjtype)){
			flag = 1;
			list = calcRepository.scheduleByJsy(line, date, date2, gsdm, fgsdm, cont);
		} else if("售票员".equals(tjtype)){
			flag = 2;
			list = calcRepository.scheduleBySpy(line, date, date2, gsdm, fgsdm, cont);
		} else if("车辆自编号".equals(tjtype)){
			flag = 3;
			list = calcRepository.scheduleByZbh(line, date, date2, gsdm, fgsdm, cont);
		}
		
		List<CalcWaybill> calcList = new ArrayList<CalcWaybill>();
		Map<String, CalcWaybill> calcMap = new HashMap<String, CalcWaybill>();
		
		CalcWaybill zjCalc = this.initCalcWaybill();
		zjCalc.setjName("合计");
		for(CalcWaybill c : list){
			String key = "";
			if(flag == 1){
				if(c.getjGh() != null && c.getjName() != null)
					key += c.getjGh() + "/" + c.getjName();
			} else if(flag == 2){
				if(c.getsGh() != null && c.getsName() != null)
					key += c.getsGh() + "/" + c.getsName();
			} else if(flag == 3){
				if(c.getCl() != null)
				key += c.getCl();
			}
			
			if(key.trim().length() == 0 || "/".equals(key))
				continue;
			
			String jName = key;
			key = c.getXl() + "/" + key;
			
			CalcWaybill calc = null;
			if(calcMap.containsKey(key)){
				calc = calcMap.get(key);
			} else {
				calc = this.initCalcWaybill();
				calc.setXlName(c.getXlName());
				calc.setXl(c.getXl());
				calc.setjName(jName);
				calcList.add(calc);
				calcMap.put(key, calc);
			}
			
			this.summation(calc, c);
			
			this.summation(zjCalc, c);
			
		}
		calcList.add(zjCalc);
		calcMap.put("合计", zjCalc);
		
		Map<String, Map<String, Object>> keyMap = new HashMap<String, Map<String, Object>>();
		for(CalcWaybill c : calcList){
			Map<String, Object> m = new HashMap<String, Object>();
			m.put("gS", BasicData.businessFgsCodeNameMap.get(fgsdm+"_"+gsdm));
			m.put("xl", c.getXl());
			m.put("xlName", c.getXlName());
			m.put("jName", c.getjName());
			m.put("jhyybc", c.getJhyybc());
			m.put("jhfyybc", c.getJhfyybc());
			m.put("sjyybc", c.getSjyybc());
			m.put("sjfyybc", c.getSjfyybc());
			m.put("lbbc", c.getLbbc());
			m.put("ljbc", c.getLjbc());
			m.put("jhzlc", Arith.add(c.getJhyylc(), c.getJhfyylc()));
			m.put("jhyylc", c.getJhyylc());
			m.put("jhfyylc", c.getJhfyylc());
			m.put("sjzlc", Arith.add(c.getSjyylc(), c.getSjfyylc()));
			m.put("sjyylc", c.getSjyylc());
			m.put("sjfyylc", c.getSjfyylc());
			m.put("lblc", c.getLblc());
			m.put("ljyylc", c.getLjyylc());
			m.put("ljfyylc", c.getLjfyylc());
			if(flag != 2){
				m.put("hyl", 0);
				m.put("jzl", 0);
				m.put("sh", 0);
			}
			resList.add(m);
			keyMap.put(c.getXl() + "/" + c.getjName(), m);
		}
		
		String linesql="";
	    if(!line.equals("")){
	    	linesql +=" and xlbm ='"+line+"' ";
	    }
	    if(!gsdm.equals("")){
	    	linesql +=" and ssgsdm ='"+gsdm+"' ";
	    }
	    if(!fgsdm.equals("")){
	    	linesql +=" and fgsdm ='"+fgsdm+"' ";
	    }
		String nysql="SELECT id,xlbm,nbbm,jsy,jzl as jzl,yh as yh,sh as sh,fgsdm FROM bsth_c_ylb"
				+ " WHERE rq >= '"+date+"' and rq <= '"+date2+"'"
				+ linesql
				+ " union"
				+ " SELECT id,xlbm,nbbm,jsy,cdl as jzl,hd as yh,sh as sh,fgsdm FROM bsth_c_dlb"
				+ " WHERE rq >= '"+date2+"' and rq <= '"+date2+"'"
				+ linesql;
		List<Singledata> listNy = jdbcTemplate.query(nysql, new RowMapper<Singledata>() {
			@Override
			public Singledata mapRow(ResultSet arg0, int arg1) throws SQLException {
				Singledata sin = new Singledata();
				sin.setxL(arg0.getString("xlbm"));
				sin.setJsy(arg0.getString("jsy"));
				sin.setClzbh(arg0.getString("nbbm"));
				sin.setJzl(arg0.getString("jzl"));
				sin.setHyl(arg0.getString("yh"));
				sin.setUnyyyl(arg0.getString("sh"));
				sin.setgS(arg0.getString("fgsdm"));
				return sin;
			}
		});
		
		if(flag != 2){
			Map<String, Object> last = resList.get(resList.size()-1);
			last.put("hyl", 0);
			last.put("jzl", 0);
			last.put("sh", 0);
			
			//统计油,电表中手动添加的或者有加注没里程的数据
			for (int i = 0; i < listNy.size(); i++) {
				Singledata sin_=listNy.get(i);
				String xl=sin_.getxL();
				String str = "";
				if(flag == 1){
					str = sin_.getJsy() + "/" + BasicData.allPerson.get(gsdm+"-"+sin_.getJsy());
				} else {
					str = sin_.getClzbh();
				}
//				boolean fages=true;
				if(keyMap.containsKey(xl + "/" + str)){
					Map<String, Object> m = keyMap.get(xl + "/" + str);
					m.put("hyl", Arith.add(m.get("hyl"), sin_.getHyl()!=null?sin_.getHyl():0));
					m.put("jzl", Arith.add(m.get("jzl"), sin_.getJzl()!=null?sin_.getJzl():0));
					m.put("sh", Arith.add(m.get("sh"), sin_.getUnyyyl()!=null?sin_.getUnyyyl():0));
					last.put("hyl", Arith.add(last.get("hyl"), m.get("hyl")));
					last.put("jzl", Arith.add(last.get("jzl"), m.get("jzl")));
					last.put("sh", Arith.add(last.get("sh"), m.get("sh")));
				} else {
					Map<String, Object> m = new HashMap<String, Object>();
					m.put("gS", BasicData.businessFgsCodeNameMap.get(fgsdm+"_"+gsdm));
					m.put("xl", xl);
					m.put("xlName", BasicData.lineCodeAllNameMap.get(xl));
					m.put("jName", str);
					m.put("jhzlc", 0);
					m.put("sjzlc", 0);
					m.put("sjfyylc", 0);
					m.put("hyl", sin_.getHyl()!=null?sin_.getHyl():0);
					m.put("jzl", sin_.getJzl()!=null?sin_.getJzl():0);
					m.put("sh", sin_.getUnyyyl()!=null?sin_.getUnyyyl():0);
					last.put("hyl", Arith.add(last.get("hyl"), m.get("hyl")));
					last.put("jzl", Arith.add(last.get("jzl"), m.get("jzl")));
					last.put("sh", Arith.add(last.get("sh"), m.get("sh")));
					
					keyMap.put(xl + "/" + str, m);
				}
			}
			resList.remove(last);
			resList.add(last);
		}
		
		return resList;
	}

}